[llvm] [AMDGPU][NFC] Add GFX13 run lines to bitcast tests (PR #216980)
Mariusz Sikora via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 18 03:19:57 PDT 2026
https://github.com/mariusz-sikora-at-amd created https://github.com/llvm/llvm-project/pull/216980
None
>From b13bb17622549f020a1ae9a9fe4936afa9f4a07e Mon Sep 17 00:00:00 2001
From: Mariusz Sikora <mariusz.sikora at amd.com>
Date: Tue, 18 Aug 2026 05:34:49 -0400
Subject: [PATCH] [AMDGPU][NFC] Add GFX13 run lines to bitcast tests
---
.../CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll | 37371 ++++++++++++++++
.../CodeGen/AMDGPU/amdgcn.bitcast.128bit.ll | 5218 +++
.../CodeGen/AMDGPU/amdgcn.bitcast.160bit.ll | 634 +
.../CodeGen/AMDGPU/amdgcn.bitcast.16bit.ll | 420 +
.../CodeGen/AMDGPU/amdgcn.bitcast.192bit.ll | 1625 +
.../CodeGen/AMDGPU/amdgcn.bitcast.224bit.ll | 704 +
.../CodeGen/AMDGPU/amdgcn.bitcast.256bit.ll | 8412 ++++
.../CodeGen/AMDGPU/amdgcn.bitcast.288bit.ll | 770 +
.../CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll | 8459 ++++
.../CodeGen/AMDGPU/amdgcn.bitcast.32bit.ll | 2723 ++
.../CodeGen/AMDGPU/amdgcn.bitcast.352bit.ll | 822 +
.../CodeGen/AMDGPU/amdgcn.bitcast.384bit.ll | 2064 +
.../CodeGen/AMDGPU/amdgcn.bitcast.448bit.ll | 2201 +
.../CodeGen/AMDGPU/amdgcn.bitcast.48bit.ll | 288 +-
.../CodeGen/AMDGPU/amdgcn.bitcast.576bit.ll | 6762 +++
.../CodeGen/AMDGPU/amdgcn.bitcast.640bit.ll | 7348 +++
.../CodeGen/AMDGPU/amdgcn.bitcast.64bit.ll | 4077 ++
.../CodeGen/AMDGPU/amdgcn.bitcast.704bit.ll | 7929 ++++
.../CodeGen/AMDGPU/amdgcn.bitcast.768bit.ll | 8503 ++++
.../CodeGen/AMDGPU/amdgcn.bitcast.832bit.ll | 9084 ++++
.../CodeGen/AMDGPU/amdgcn.bitcast.896bit.ll | 9658 ++++
.../CodeGen/AMDGPU/amdgcn.bitcast.960bit.ll | 10251 +++++
.../CodeGen/AMDGPU/amdgcn.bitcast.96bit.ll | 2895 ++
.../test/CodeGen/AMDGPU/amdgcn.bitcast.ptr.ll | 13 +
24 files changed, 138223 insertions(+), 8 deletions(-)
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
index 2b1650e429b86..806c2b918ba7d 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
@@ -7,6 +7,8 @@
; RUN: llc -mtriple=amdgpu9.00 -verify-machineinstrs=0 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <32 x float> @bitcast_v32i32_to_v32f32(<32 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v32i32_to_v32f32:
@@ -210,6 +212,46 @@ define <32 x float> @bitcast_v32i32_to_v32f32(<32 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v32f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_nc_u32 v31, 3, v31 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -615,6 +657,92 @@ define inreg <32 x float> @bitcast_v32i32_to_v32f32_scalar(<32 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v32f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -818,6 +946,46 @@ define <32 x i32> @bitcast_v32f32_to_v32i32(<32 x float> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v32i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_f32 v31, 1.0, v31 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1447,6 +1615,92 @@ define inreg <32 x i32> @bitcast_v32f32_to_v32i32_scalar(<32 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v32i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1666,6 +1920,46 @@ define <16 x i64> @bitcast_v32i32_to_v16i64(<32 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v16i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_nc_u32 v31, 3, v31 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2071,6 +2365,92 @@ define inreg <16 x i64> @bitcast_v32i32_to_v16i64_scalar(<32 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v16i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2298,6 +2678,70 @@ define <32 x i32> @bitcast_v16i64_to_v32i32(<16 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v32i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v30, vcc_lo, v30, 3
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_co_ci_u32_e64 v31, null, 0, v31, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2703,6 +3147,76 @@ define inreg <32 x i32> @bitcast_v16i64_to_v32i32_scalar(<16 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v32i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s5, v13
+; GFX13-NEXT: v_readfirstlane_b32 s4, v12
+; GFX13-NEXT: v_readfirstlane_b32 s7, v11
+; GFX13-NEXT: v_readfirstlane_b32 s6, v10
+; GFX13-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-NEXT: v_readfirstlane_b32 s8, v8
+; GFX13-NEXT: v_readfirstlane_b32 s11, v7
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-NEXT: v_readfirstlane_b32 s12, v4
+; GFX13-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-NEXT: v_readfirstlane_b32 s14, v2
+; GFX13-NEXT: v_readfirstlane_b32 s41, v1
+; GFX13-NEXT: v_readfirstlane_b32 s40, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s40 :: v_dual_mov_b32 v19, s41
+; GFX13-NEXT: v_dual_mov_b32 v20, s14 :: v_dual_mov_b32 v21, s15
+; GFX13-NEXT: v_dual_mov_b32 v22, s12 :: v_dual_mov_b32 v23, s13
+; GFX13-NEXT: v_dual_mov_b32 v24, s10 :: v_dual_mov_b32 v25, s11
+; GFX13-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v27, s9
+; GFX13-NEXT: v_dual_mov_b32 v28, s6 :: v_dual_mov_b32 v29, s7
+; GFX13-NEXT: v_dual_mov_b32 v30, s4 :: v_dual_mov_b32 v31, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2922,6 +3436,46 @@ define <16 x double> @bitcast_v32i32_to_v16f64(<32 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v16f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_nc_u32 v31, 3, v31 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3327,6 +3881,92 @@ define inreg <16 x double> @bitcast_v32i32_to_v16f64_scalar(<32 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v16f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3482,6 +4122,46 @@ define <32 x i32> @bitcast_v16f64_to_v32i32(<16 x double> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v32i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_f64_e32 v[30:31], 1.0, v[30:31]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4047,6 +4727,134 @@ define inreg <32 x i32> @bitcast_v16f64_to_v32i32_scalar(<16 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v32i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[30:31], s[66:67], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[64:65], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8063,6 +8871,850 @@ define <128 x i8> @bitcast_v32i32_to_v128i8(<32 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i32_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x16
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v20 :: v_dual_add_nc_u32 v19, 3, v19
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v18, 3, v18 :: v_dual_add_nc_u32 v17, 3, v17
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v32, 3, v32 :: v_dual_add_nc_u32 v31, 3, v31
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v16, 3, v16 :: v_dual_add_nc_u32 v15, 3, v15
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v28, 3, v28 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v27, 3, v27
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v14, 3, v14 :: v_dual_add_nc_u32 v13, 3, v13
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v12 :: v_dual_add_nc_u32 v11, 3, v11
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v24, 3, v24 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v23, 3, v23
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v22 :: v_dual_add_nc_u32 v21, 3, v21
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i32_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x16
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v20 :: v_dual_add_nc_u32 v19, 3, v19
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v18, 3, v18 :: v_dual_add_nc_u32 v17, 3, v17
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v32, 3, v32 :: v_dual_add_nc_u32 v31, 3, v31
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v16, 3, v16 :: v_dual_add_nc_u32 v15, 3, v15
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v28, 3, v28 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v27, 3, v27
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v14, 3, v14 :: v_dual_add_nc_u32 v13, 3, v13
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v12, 3, v12 :: v_dual_add_nc_u32 v11, 3, v11
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v24, 3, v24 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v23, 3, v23
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v22 :: v_dual_add_nc_u32 v21, 3, v21
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11742,6 +13394,779 @@ define inreg <128 x i8> @bitcast_v32i32_to_v128i8_scalar(<32 x i32> inreg %a, i3
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v23, s32 nv
+; GFX13-NEXT: scratch_store_b32 off, v24, s32 offset:4 nv
+; GFX13-NEXT: scratch_store_b32 off, v25, s32 offset:8 nv
+; GFX13-NEXT: scratch_store_b32 off, v26, s32 offset:12 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v23, s34, 0
+; GFX13-NEXT: v_writelane_b32 v23, s35, 1
+; GFX13-NEXT: v_writelane_b32 v23, s36, 2
+; GFX13-NEXT: v_writelane_b32 v23, s37, 3
+; GFX13-NEXT: v_writelane_b32 v23, s38, 4
+; GFX13-NEXT: v_writelane_b32 v23, s39, 5
+; GFX13-NEXT: v_writelane_b32 v23, s48, 6
+; GFX13-NEXT: v_writelane_b32 v23, s49, 7
+; GFX13-NEXT: v_writelane_b32 v23, s50, 8
+; GFX13-NEXT: v_writelane_b32 v23, s51, 9
+; GFX13-NEXT: v_writelane_b32 v23, s52, 10
+; GFX13-NEXT: v_writelane_b32 v23, s53, 11
+; GFX13-NEXT: v_writelane_b32 v23, s54, 12
+; GFX13-NEXT: v_writelane_b32 v23, s55, 13
+; GFX13-NEXT: v_writelane_b32 v23, s64, 14
+; GFX13-NEXT: v_writelane_b32 v23, s65, 15
+; GFX13-NEXT: v_writelane_b32 v23, s66, 16
+; GFX13-NEXT: v_writelane_b32 v23, s67, 17
+; GFX13-NEXT: v_writelane_b32 v23, s68, 18
+; GFX13-NEXT: v_writelane_b32 v23, s69, 19
+; GFX13-NEXT: v_writelane_b32 v23, s70, 20
+; GFX13-NEXT: v_writelane_b32 v23, s71, 21
+; GFX13-NEXT: v_writelane_b32 v23, s80, 22
+; GFX13-NEXT: v_writelane_b32 v23, s81, 23
+; GFX13-NEXT: v_writelane_b32 v23, s82, 24
+; GFX13-NEXT: v_writelane_b32 v23, s83, 25
+; GFX13-NEXT: v_writelane_b32 v23, s84, 26
+; GFX13-NEXT: v_writelane_b32 v23, s85, 27
+; GFX13-NEXT: v_writelane_b32 v23, s86, 28
+; GFX13-NEXT: v_writelane_b32 v23, s87, 29
+; GFX13-NEXT: v_writelane_b32 v23, s96, 30
+; GFX13-NEXT: v_writelane_b32 v23, s97, 31
+; GFX13-NEXT: v_writelane_b32 v24, s98, 0
+; GFX13-NEXT: v_writelane_b32 v24, s99, 1
+; GFX13-NEXT: v_writelane_b32 v24, s100, 2
+; GFX13-NEXT: v_writelane_b32 v24, s101, 3
+; GFX13-NEXT: v_writelane_b32 v24, s102, 4
+; GFX13-NEXT: v_writelane_b32 v24, s103, 5
+; GFX13-NEXT: v_writelane_b32 v24, s104, 6
+; GFX13-NEXT: v_writelane_b32 v24, s30, 7
+; GFX13-NEXT: v_writelane_b32 v24, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s5, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s7, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s9, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s13, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s15, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s103, 0
+; GFX13-NEXT: ; implicit-def: $vgpr26 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr25 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[4:5], 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 18
+; GFX13-NEXT: s_lshr_b32 s43, s12, 16
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[8:9], 24
+; GFX13-NEXT: s_lshr_b32 s31, s5, 24
+; GFX13-NEXT: s_lshr_b32 s104, s5, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 19
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s30, s5, 8
+; GFX13-NEXT: s_lshr_b32 s42, s4, 16
+; GFX13-NEXT: s_lshr_b32 s34, s4, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 20
+; GFX13-NEXT: s_lshr_b32 s43, s20, 16
+; GFX13-NEXT: s_lshr_b32 s35, s7, 24
+; GFX13-NEXT: s_lshr_b32 s37, s7, 16
+; GFX13-NEXT: s_lshr_b32 s36, s7, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 21
+; GFX13-NEXT: s_lshr_b32 s43, s20, 8
+; GFX13-NEXT: s_lshr_b32 s61, s6, 16
+; GFX13-NEXT: s_lshr_b32 s38, s6, 8
+; GFX13-NEXT: s_lshr_b32 s48, s9, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 22
+; GFX13-NEXT: s_lshr_b32 s43, s19, 8
+; GFX13-NEXT: s_lshr_b32 s39, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 8
+; GFX13-NEXT: s_lshr_b32 s44, s8, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 23
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 24
+; GFX13-NEXT: s_lshr_b32 s49, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 24
+; GFX13-NEXT: s_lshr_b32 s43, s18, 8
+; GFX13-NEXT: s_lshr_b32 s51, s10, 16
+; GFX13-NEXT: s_lshr_b32 s50, s10, 8
+; GFX13-NEXT: s_lshr_b32 s57, s13, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 25
+; GFX13-NEXT: s_lshr_b32 s43, s17, 24
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s59, s13, 8
+; GFX13-NEXT: s_lshr_b32 s58, s12, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 26
+; GFX13-NEXT: s_lshr_b32 s43, s17, 16
+; GFX13-NEXT: s_lshr_b32 s60, s15, 24
+; GFX13-NEXT: s_lshr_b32 s53, s15, 16
+; GFX13-NEXT: s_lshr_b32 s52, s15, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 27
+; GFX13-NEXT: s_lshr_b32 s43, s17, 8
+; GFX13-NEXT: s_lshr_b32 s62, s14, 16
+; GFX13-NEXT: s_lshr_b32 s63, s14, 8
+; GFX13-NEXT: s_lshr_b32 s54, s41, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 28
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s55, s41, 16
+; GFX13-NEXT: s_lshr_b32 s64, s41, 8
+; GFX13-NEXT: s_lshr_b32 s66, s40, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 29
+; GFX13-NEXT: s_lshr_b32 s43, s16, 8
+; GFX13-NEXT: s_lshr_b32 s65, s40, 8
+; GFX13-NEXT: s_lshr_b32 s69, s29, 24
+; GFX13-NEXT: s_lshr_b32 s71, s29, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 30
+; GFX13-NEXT: s_lshr_b32 s43, s3, 24
+; GFX13-NEXT: s_lshr_b32 s67, s29, 8
+; GFX13-NEXT: s_lshr_b32 s81, s28, 16
+; GFX13-NEXT: s_lshr_b32 s80, s28, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 31
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s82, s27, 24
+; GFX13-NEXT: v_writelane_b32 v25, s43, 0
+; GFX13-NEXT: s_lshr_b32 s43, s3, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: s_lshr_b32 s83, s27, 16
+; GFX13-NEXT: s_lshr_b32 s84, s27, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 1
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: s_lshr_b32 s86, s26, 16
+; GFX13-NEXT: s_lshr_b32 s85, s26, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 2
+; GFX13-NEXT: s_lshr_b32 s43, s2, 8
+; GFX13-NEXT: v_writelane_b32 v26, s74, 14
+; GFX13-NEXT: s_lshr_b32 s96, s25, 24
+; GFX13-NEXT: s_lshr_b32 s97, s25, 16
+; GFX13-NEXT: v_writelane_b32 v25, s43, 3
+; GFX13-NEXT: s_lshr_b32 s43, s1, 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 15
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[10:11], 24
+; GFX13-NEXT: s_lshr_b32 s87, s25, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 4
+; GFX13-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 12
+; GFX13-NEXT: s_lshr_b32 s99, s24, 16
+; GFX13-NEXT: s_lshr_b32 s98, s24, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 5
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 13
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[12:13], 24
+; GFX13-NEXT: s_lshr_b32 s101, s23, 24
+; GFX13-NEXT: v_writelane_b32 v25, s43, 6
+; GFX13-NEXT: s_lshr_b32 s43, s0, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 10
+; GFX13-NEXT: s_lshr_b32 s102, s23, 16
+; GFX13-NEXT: s_lshr_b32 s100, s23, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 7
+; GFX13-NEXT: s_lshr_b32 s43, s0, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 11
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_lshr_b32 s76, s22, 8
+; GFX13-NEXT: s_lshr_b32 s78, s21, 24
+; GFX13-NEXT: s_lshr_b32 s77, s21, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 8
+; GFX13-NEXT: s_lshr_b32 s68, s21, 8
+; GFX13-NEXT: s_lshr_b32 s79, s19, 24
+; GFX13-NEXT: s_lshr_b32 s70, s19, 16
+; GFX13-NEXT: v_writelane_b32 v25, s43, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 9
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[18:19], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 6
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[0:1], 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 7
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[28:29], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 4
+; GFX13-NEXT: v_writelane_b32 v26, s75, 5
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 2
+; GFX13-NEXT: v_writelane_b32 v26, s75, 3
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[24:25], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 0
+; GFX13-NEXT: v_writelane_b32 v26, s75, 1
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[22:23], 24
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: s_mov_b32 s103, -1
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr100
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr30
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: v_writelane_b32 v26, s42, 0
+; GFX13-NEXT: v_writelane_b32 v26, s43, 1
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: v_writelane_b32 v26, s72, 2
+; GFX13-NEXT: v_writelane_b32 v26, s73, 3
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 4
+; GFX13-NEXT: v_writelane_b32 v26, s73, 5
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 6
+; GFX13-NEXT: v_writelane_b32 v26, s73, 7
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 8
+; GFX13-NEXT: v_writelane_b32 v26, s73, 9
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 10
+; GFX13-NEXT: v_writelane_b32 v26, s73, 11
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 12
+; GFX13-NEXT: v_writelane_b32 v26, s73, 13
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 14
+; GFX13-NEXT: v_writelane_b32 v26, s73, 15
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_and_b32 s43, s103, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_mov_b32 s103, s31
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_mov_b32 s31, s42
+; GFX13-NEXT: s_mov_b32 s42, s61
+; GFX13-NEXT: s_mov_b32 s43, s48
+; GFX13-NEXT: v_readlane_b32 s48, v26, 18
+; GFX13-NEXT: v_readlane_b32 s61, v26, 19
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_lshr_b32 s72, s22, 16
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 20
+; GFX13-NEXT: s_lshr_b32 s72, s20, 16
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 21
+; GFX13-NEXT: s_lshr_b32 s72, s20, 8
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 22
+; GFX13-NEXT: s_lshr_b32 s72, s19, 8
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 23
+; GFX13-NEXT: s_lshr_b32 s72, s18, 16
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 24
+; GFX13-NEXT: s_lshr_b32 s72, s18, 8
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[8:9], 24
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 25
+; GFX13-NEXT: s_lshr_b32 s72, s17, 24
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 26
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 27
+; GFX13-NEXT: s_lshr_b32 s72, s17, 8
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 28
+; GFX13-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 29
+; GFX13-NEXT: s_lshr_b32 s72, s16, 8
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 30
+; GFX13-NEXT: s_lshr_b32 s72, s3, 24
+; GFX13-NEXT: s_lshr_b32 s103, s5, 24
+; GFX13-NEXT: s_lshr_b32 s104, s5, 16
+; GFX13-NEXT: s_lshr_b32 s30, s5, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 31
+; GFX13-NEXT: s_lshr_b32 s72, s3, 16
+; GFX13-NEXT: s_lshr_b32 s31, s4, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 0
+; GFX13-NEXT: s_lshr_b32 s72, s3, 8
+; GFX13-NEXT: s_lshr_b32 s34, s4, 8
+; GFX13-NEXT: s_lshr_b32 s35, s7, 24
+; GFX13-NEXT: s_lshr_b32 s37, s7, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 1
+; GFX13-NEXT: s_lshr_b32 s72, s2, 16
+; GFX13-NEXT: s_lshr_b32 s36, s7, 8
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s38, s6, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 2
+; GFX13-NEXT: s_lshr_b32 s72, s2, 8
+; GFX13-NEXT: s_lshr_b32 s43, s9, 24
+; GFX13-NEXT: s_lshr_b32 s39, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 3
+; GFX13-NEXT: s_lshr_b32 s72, s1, 24
+; GFX13-NEXT: s_lshr_b32 s48, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 8
+; GFX13-NEXT: s_lshr_b32 s47, s11, 24
+; GFX13-NEXT: v_writelane_b32 v25, s72, 4
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s49, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 8
+; GFX13-NEXT: s_lshr_b32 s51, s10, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 5
+; GFX13-NEXT: s_lshr_b32 s72, s1, 8
+; GFX13-NEXT: s_lshr_b32 s50, s10, 8
+; GFX13-NEXT: s_lshr_b32 s57, s13, 24
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 6
+; GFX13-NEXT: s_lshr_b32 s72, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s13, 8
+; GFX13-NEXT: s_lshr_b32 s61, s12, 16
+; GFX13-NEXT: s_lshr_b32 s58, s12, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 7
+; GFX13-NEXT: s_lshr_b32 s72, s0, 8
+; GFX13-NEXT: s_lshr_b32 s60, s15, 24
+; GFX13-NEXT: s_lshr_b32 s53, s15, 16
+; GFX13-NEXT: s_lshr_b32 s52, s15, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 8
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[4:5], 24
+; GFX13-NEXT: s_lshr_b32 s62, s14, 16
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: s_lshr_b32 s63, s14, 8
+; GFX13-NEXT: s_lshr_b32 s54, s41, 24
+; GFX13-NEXT: s_lshr_b32 s55, s41, 16
+; GFX13-NEXT: s_lshr_b32 s64, s41, 8
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: s_lshr_b32 s66, s40, 16
+; GFX13-NEXT: s_lshr_b32 s65, s40, 8
+; GFX13-NEXT: s_lshr_b32 s69, s29, 24
+; GFX13-NEXT: s_lshr_b32 s71, s29, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 14
+; GFX13-NEXT: s_lshr_b32 s67, s29, 8
+; GFX13-NEXT: s_lshr_b32 s81, s28, 16
+; GFX13-NEXT: s_lshr_b32 s80, s28, 8
+; GFX13-NEXT: s_lshr_b32 s82, s27, 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 15
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[10:11], 24
+; GFX13-NEXT: s_lshr_b32 s83, s27, 16
+; GFX13-NEXT: s_lshr_b32 s84, s27, 8
+; GFX13-NEXT: s_lshr_b32 s86, s26, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 12
+; GFX13-NEXT: s_lshr_b32 s85, s26, 8
+; GFX13-NEXT: s_lshr_b32 s96, s25, 24
+; GFX13-NEXT: s_lshr_b32 s97, s25, 16
+; GFX13-NEXT: s_lshr_b32 s87, s25, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 13
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[12:13], 24
+; GFX13-NEXT: s_lshr_b32 s99, s24, 16
+; GFX13-NEXT: s_lshr_b32 s98, s24, 8
+; GFX13-NEXT: s_lshr_b32 s101, s23, 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 10
+; GFX13-NEXT: s_lshr_b32 s102, s23, 16
+; GFX13-NEXT: s_lshr_b32 s100, s23, 8
+; GFX13-NEXT: s_lshr_b32 s76, s22, 8
+; GFX13-NEXT: s_lshr_b32 s78, s21, 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 11
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_lshr_b32 s77, s21, 16
+; GFX13-NEXT: s_lshr_b32 s68, s21, 8
+; GFX13-NEXT: s_lshr_b32 s79, s19, 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 8
+; GFX13-NEXT: s_lshr_b32 s70, s19, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[18:19], 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 9
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[0:1], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 6
+; GFX13-NEXT: v_writelane_b32 v26, s75, 7
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[28:29], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 4
+; GFX13-NEXT: v_writelane_b32 v26, s75, 5
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 2
+; GFX13-NEXT: v_writelane_b32 v26, s75, 3
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[24:25], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 0
+; GFX13-NEXT: v_writelane_b32 v26, s75, 1
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[22:23], 24
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: v_mov_b32_e32 v1, 0xc0c0004
+; GFX13-NEXT: v_readlane_b32 s73, v25, 7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v2, s73, vcc_lo, v1
+; GFX13-NEXT: v_readlane_b32 s73, v25, 8
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v3, s0, s73, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 6
+; GFX13-NEXT: v_perm_b32 v21, s70, s79, v1
+; GFX13-NEXT: v_perm_b32 v22, s77, s78, v1
+; GFX13-NEXT: v_perm_b32 v17, s21, s68, v1
+; GFX13-NEXT: v_readlane_b32 s70, v23, 20
+; GFX13-NEXT: v_perm_b32 v4, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 2
+; GFX13-NEXT: v_readlane_b32 s1, v25, 5
+; GFX13-NEXT: v_readlane_b32 s68, v23, 18
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v5, s0, s94, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 3
+; GFX13-NEXT: v_perm_b32 v6, s2, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v7, s3, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 29
+; GFX13-NEXT: v_perm_b32 v8, s0, s92, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v9, s16, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 28
+; GFX13-NEXT: v_perm_b32 v10, s17, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v11, s0, s90, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 25
+; GFX13-NEXT: v_perm_b32 v12, s18, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 23
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v13, s19, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 21
+; GFX13-NEXT: v_perm_b32 v14, s0, s88, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 20
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v15, s0, s74, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 22
+; GFX13-NEXT: v_perm_b32 v16, s20, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v18, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 31
+; GFX13-NEXT: v_readlane_b32 s1, v25, 0
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v19, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 26
+; GFX13-NEXT: v_readlane_b32 s1, v26, 27
+; GFX13-NEXT: v_or_b32_e32 v2, v3, v2
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v5 :: v_dual_bitop2_b32 v3, v4, v18 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v19
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_perm_b32 v20, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 0
+; GFX13-NEXT: v_readlane_b32 s1, v26, 1
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v4
+; GFX13-NEXT: v_or_b32_e32 v5, v7, v5
+; GFX13-NEXT: v_perm_b32 v6, s102, s101, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v14
+; GFX13-NEXT: v_perm_b32 v14, s7, s36, v1
+; GFX13-NEXT: v_readlane_b32 s102, v24, 4
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v8
+; GFX13-NEXT: v_dual_lshlrev_b32 v3, 16, v20 :: v_dual_lshlrev_b32 v4, 16, v11
+; GFX13-NEXT: v_dual_lshlrev_b32 v5, 16, v21 :: v_dual_lshlrev_b32 v8, 16, v22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v9, v2
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v4, v12, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v15 :: v_dual_bitop2_b32 v5, v13, v5 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v9, s22, s76, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v11, s25, s87, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:16
+; GFX13-NEXT: v_or_b32_e32 v2, v16, v7
+; GFX13-NEXT: v_perm_b32 v5, s99, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v3, v17, v8
+; GFX13-NEXT: v_perm_b32 v7, s23, s100, v1
+; GFX13-NEXT: v_perm_b32 v8, s97, s96, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 2
+; GFX13-NEXT: v_readlane_b32 s1, v26, 3
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v9, s24, s98, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v5 :: v_dual_lshlrev_b32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v12, s86, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v5, v7, v6
+; GFX13-NEXT: v_readlane_b32 s0, v26, 4
+; GFX13-NEXT: v_readlane_b32 s1, v26, 5
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v10
+; GFX13-NEXT: v_or_b32_e32 v7, v11, v8
+; GFX13-NEXT: v_perm_b32 v8, s26, s85, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v12
+; GFX13-NEXT: v_perm_b32 v10, s83, s82, v1
+; GFX13-NEXT: v_perm_b32 v11, s81, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:32
+; GFX13-NEXT: v_perm_b32 v2, s71, s69, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 6
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-NEXT: v_perm_b32 v9, s27, s84, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, s28, s80, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s29, s67, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v2
+; GFX13-NEXT: v_perm_b32 v12, s66, s0, v1
+; GFX13-NEXT: v_readlane_b32 s1, v26, 7
+; GFX13-NEXT: v_or_b32_e32 v9, v9, v3
+; GFX13-NEXT: v_readlane_b32 s0, v26, 8
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s55, s54, v1
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v5
+; GFX13-NEXT: v_perm_b32 v4, s40, s65, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v12
+; GFX13-NEXT: v_readlane_b32 s1, v26, 9
+; GFX13-NEXT: v_perm_b32 v11, s62, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[6:9], off offset:48
+; GFX13-NEXT: v_perm_b32 v6, s53, s60, v1
+; GFX13-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-NEXT: v_perm_b32 v5, s41, s64, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v10
+; GFX13-NEXT: v_readlane_b32 s0, v26, 10
+; GFX13-NEXT: v_readlane_b32 s1, v26, 11
+; GFX13-NEXT: v_perm_b32 v8, s14, s63, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s15, s52, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s61, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v5, v5, v7
+; GFX13-NEXT: v_readlane_b32 s0, v26, 12
+; GFX13-NEXT: v_readlane_b32 s1, v26, 13
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s56, s57, v1
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_perm_b32 v8, s12, s58, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v12
+; GFX13-NEXT: v_perm_b32 v11, s51, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:64
+; GFX13-NEXT: v_perm_b32 v2, s49, s47, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 14
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-NEXT: v_perm_b32 v9, s13, s59, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, s10, s50, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s11, s46, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v2
+; GFX13-NEXT: v_perm_b32 v12, s48, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v9, v9, v3
+; GFX13-NEXT: v_readlane_b32 s1, v26, 15
+; GFX13-NEXT: v_readlane_b32 s0, v26, 16
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s39, s43, v1
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v5
+; GFX13-NEXT: v_perm_b32 v4, s8, s44, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v12
+; GFX13-NEXT: v_perm_b32 v11, s42, s72, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v12, s6, s38, v1
+; GFX13-NEXT: v_readlane_b32 s1, v26, 17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v5, s9, s45, v1
+; GFX13-NEXT: v_readlane_b32 s101, v24, 3
+; GFX13-NEXT: v_readlane_b32 s100, v24, 2
+; GFX13-NEXT: v_readlane_b32 s99, v24, 1
+; GFX13-NEXT: v_readlane_b32 s98, v24, 0
+; GFX13-NEXT: v_or_b32_e32 v5, v5, v10
+; GFX13-NEXT: v_perm_b32 v10, s37, s35, v1
+; GFX13-NEXT: v_readlane_b32 s97, v23, 31
+; GFX13-NEXT: v_readlane_b32 s96, v23, 30
+; GFX13-NEXT: v_readlane_b32 s87, v23, 29
+; GFX13-NEXT: v_readlane_b32 s86, v23, 28
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v10 :: v_dual_bitop2_b32 v10, v12, v11 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v12, s31, s0, v1
+; GFX13-NEXT: v_readlane_b32 s85, v23, 27
+; GFX13-NEXT: v_readlane_b32 s84, v23, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v11, v14, v13
+; GFX13-NEXT: v_perm_b32 v13, s4, s34, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-NEXT: v_readlane_b32 s83, v23, 25
+; GFX13-NEXT: v_readlane_b32 s82, v23, 24
+; GFX13-NEXT: v_readlane_b32 s81, v23, 23
+; GFX13-NEXT: v_readlane_b32 s80, v23, 22
+; GFX13-NEXT: v_or_b32_e32 v12, v13, v12
+; GFX13-NEXT: v_perm_b32 v13, s104, s103, v1
+; GFX13-NEXT: v_perm_b32 v1, s5, s30, v1
+; GFX13-NEXT: v_readlane_b32 s30, v24, 7
+; GFX13-NEXT: v_readlane_b32 s31, v24, 8
+; GFX13-NEXT: v_readlane_b32 s104, v24, 6
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_readlane_b32 s103, v24, 5
+; GFX13-NEXT: v_readlane_b32 s71, v23, 21
+; GFX13-NEXT: v_readlane_b32 s69, v23, 19
+; GFX13-NEXT: v_readlane_b32 s67, v23, 17
+; GFX13-NEXT: v_or_b32_e32 v13, v1, v13
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[6:9], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[10:13], off offset:112
+; GFX13-NEXT: v_readlane_b32 s66, v23, 16
+; GFX13-NEXT: v_readlane_b32 s65, v23, 15
+; GFX13-NEXT: v_readlane_b32 s64, v23, 14
+; GFX13-NEXT: v_readlane_b32 s55, v23, 13
+; GFX13-NEXT: v_readlane_b32 s54, v23, 12
+; GFX13-NEXT: v_readlane_b32 s53, v23, 11
+; GFX13-NEXT: v_readlane_b32 s52, v23, 10
+; GFX13-NEXT: v_readlane_b32 s51, v23, 9
+; GFX13-NEXT: v_readlane_b32 s50, v23, 8
+; GFX13-NEXT: v_readlane_b32 s49, v23, 7
+; GFX13-NEXT: v_readlane_b32 s48, v23, 6
+; GFX13-NEXT: v_readlane_b32 s39, v23, 5
+; GFX13-NEXT: v_readlane_b32 s38, v23, 4
+; GFX13-NEXT: v_readlane_b32 s37, v23, 3
+; GFX13-NEXT: v_readlane_b32 s36, v23, 2
+; GFX13-NEXT: v_readlane_b32 s35, v23, 1
+; GFX13-NEXT: v_readlane_b32 s34, v23, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v23, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v24, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v25, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v26, off, s32 offset:12 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17575,6 +20000,1627 @@ define <32 x i32> @bitcast_v128i8_to_v32i32(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v32i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:360
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:324
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v40, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v41, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v42, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v43, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v44, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v45, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v46, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v47, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v56, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v57, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v58, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v59, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v60, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v61, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v62, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v63, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v72, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v74.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v75.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v76.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v77.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v78.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v79.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v88.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v89.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v90.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v91.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v92.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v93.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v94.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v95.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v104.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v105.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v106.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v107.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v108.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v109.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v110.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v111.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v120.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v121.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v122.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v123.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v124.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v125.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v126.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v127.l, v0.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v127, v126, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v125, v124, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v123, v122, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v121, v120, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v107, v106, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v105, v104, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v95, v94, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v111, v110, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v109, v108, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v93, v92, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v91, v90, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v89, v88, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v57, v56, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v47, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v45, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v43, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v183, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v179, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v177, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v164, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v163, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v151, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v135, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v133, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v117, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v115, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v103, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v101, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v99, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v83, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v81, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v48, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v34, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v29, v48, 16, v31
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v30, v36, 16, v38
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v31, v32, 16, v34
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr127_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr126_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr125_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr124_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr123_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr122_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr121_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr120_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr111_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr110_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr109_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr108_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr107_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr106_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr105_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr104_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr95_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr94_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr93_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr92_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr91_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr90_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr89_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr88_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v127.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v126.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v125.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v124.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v123.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v122.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v121.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v120.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v111.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v110.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v109.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v108.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v107.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v106.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v105.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v104.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v95.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v94.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v93.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v92.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v91.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v90.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v89.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v88.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v73.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v72.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v60.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.h, v10.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.h, v11.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v57.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v56.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v47.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v46.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, v43.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.l, 8, v42.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, v41.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.l, v13.l, v12.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v14.l, v13.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, v183.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.h, 8, v180.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, v177.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.h, 8, v166.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v12.h, v12.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v13.h, v13.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.l, v14.h, v14.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v15.h, v15.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v16.h, v16.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, v165.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.l, 8, v164.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, v163.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.l, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.l, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.l, 8, v150.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, v149.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v15.l, v14.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.l, v16.l, v15.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v17.l, v16.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.l, v18.l, v17.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.h, v19.l, v18.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.h, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.h, 8, v144.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.h, 8, v134.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, v133.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, v131.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.l, v17.h, v17.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.h, v18.h, v18.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.l, v19.h, v19.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.h, v20.h, v20.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.l, v21.h, v21.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.l, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.l, 8, v118.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, v117.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.l, 8, v116.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, v115.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.l, 8, v114.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, v113.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.l, 8, v112.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.h, v20.l, v19.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.l, v21.l, v20.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.h, v22.l, v21.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.l, v23.l, v22.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.h, v24.l, v23.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, v103.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.h, 8, v100.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, v99.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.h, 8, v86.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.l, v22.h, v22.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.h, v23.h, v23.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.l, v24.h, v24.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.h, v25.h, v25.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v26.h, v26.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, v85.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.l, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.l, 8, v82.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, v81.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.l, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, v71.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v25.l, v24.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.l, v26.l, v25.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v27.l, v26.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v28.l, v27.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v29.l, v28.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.h, 8, v66.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.h, 8, v50.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.l, v27.h, v27.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v28.h, v28.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v29.h, v29.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v30.h, v30.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.l, v31.h, v31.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.l, 8, v48.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.l, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v34.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v30.l, v29.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v31.l, v30.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v32.h, v31.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.l, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v32.l, v33.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v10.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v10.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v11.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v12.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v13.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v14.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v14.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v15.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v16.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v16.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v17.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v18.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v18.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v19.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v20.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v20.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v21.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v22.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v22.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v23.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v24.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v24.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v25.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v26.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v26.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v27.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v28.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v29.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v30.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v30.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v31.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v31.h
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_clause 0x1e ; 124-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1f
+; GFX13-TRUE16-NEXT: s_clause 0x10 ; 68-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v32i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v86, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v72, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v75, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v73, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v91, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v92, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v93, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v94, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v95, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v104, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v105, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v106, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v107, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v108, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v109, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v110, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v111, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v120, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v121, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v122, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v123, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v124, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v125, off, s32 offset:8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v126, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v127, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v30 :: v_dual_mov_b32 v33, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v28 :: v_dual_mov_b32 v35, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, v26 :: v_dual_mov_b32 v39, v25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v24 :: v_dual_mov_b32 v37, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v22 :: v_dual_mov_b32 v49, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v18 :: v_dual_mov_b32 v53, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v16 :: v_dual_mov_b32 v55, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, v14 :: v_dual_mov_b32 v65, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, v12 :: v_dual_mov_b32 v67, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, v10 :: v_dual_mov_b32 v69, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, v8 :: v_dual_mov_b32 v71, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v6 :: v_dual_mov_b32 v81, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, v4 :: v_dual_mov_b32 v83, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v2 :: v_dual_mov_b32 v85, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v84, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v66, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v64, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v48, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v127, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v126, v125, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v124, v123, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v122, v121, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v120, v111, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v110, v109, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v108, v107, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v106, v105, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v104, v95, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v94, v93, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v92, v91, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v88, v78, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v79, v77, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v74, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v76, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v62, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v58, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v182, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v40, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v166, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v164, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v150, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v160, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v147, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v148, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v134, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v130, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v119, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v128, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v116, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v103, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v112, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v34, v98, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v32, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v34, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v84, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v83
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v82, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v81
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v70, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v69
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v68, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v66, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v67
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v53
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v2, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v55
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v51
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v50, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v49
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v48, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v39
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v37
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v34, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v32, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v127
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v126, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v125
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v122, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v121
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v111
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v124, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v123
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v120, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v110, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v109
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v108, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v107
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v106, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v105
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v94, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v93
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v104, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v95
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v92, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v91
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v16, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v89
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v79, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v77
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v16, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v88, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v78
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v75
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v19, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v76, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v73
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v17, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v63
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v72, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v19, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v62, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v61
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v20, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v14, 16, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v21, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v57
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v59
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v60, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v47
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v56, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v45
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v20, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v21, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v43
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v42, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v41
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v183
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v182, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v181
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v24, 8, v179
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v177
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v22, v24, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v176, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v167
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v166, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v21, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v22, 16, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v24
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v164, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v160, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v151
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v25, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v149
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v148, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v144, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v30, 8, v135
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v147, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v31, 8, v145
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, v134, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v133
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v30, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v132, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v131
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v31, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v27, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v129
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v28, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v128, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v119, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v115
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v117
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v114, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v113
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, v112, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v99
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v34, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, v103, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v37, 8, v101
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v33, v32, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, v98, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v38, 8, v97
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v35, v36, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, v96, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v37, v34, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v38, v33, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v39, v36, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v30, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v34, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v33, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: .LBB14_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21679,6 +25725,1124 @@ define inreg <32 x i32> @bitcast_v128i8_to_v32i32_scalar(<128 x i8> inreg %a, i3
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v32i32_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB15_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v55, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v147, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v99, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v103, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v67, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-TRUE16-NEXT: s_branch .LBB15_3
+; GFX13-TRUE16-NEXT: .LBB15_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB15_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB15_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-TRUE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v135 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_4) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v99 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 3, v101
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v65
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 3, v49
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v26, v27
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v31, 3, v52 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 3, v67
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v55 :: v_dual_add_nc_u32 v48, 3, v48
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v39, 3, v39 :: v_dual_add_nc_u32 v37, 3, v37
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v34, 3, v34 :: v_dual_lshlrev_b32 v28, 16, v28
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-TRUE16-NEXT: .LBB15_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v32i32_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:196
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:68
+; GFX13-FAKE16-NEXT: s_clause 0x11
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB15_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v64, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v147, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v103, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v67, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-FAKE16-NEXT: s_branch .LBB15_3
+; GFX13-FAKE16-NEXT: .LBB15_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB15_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB15_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v144 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v100 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v24, 3, v101 :: v_dual_add_nc_u32 v28, 3, v84
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v65 :: v_dual_bitop2_b32 v24, v26, v27 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v64 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v67 :: v_dual_add_nc_u32 v49, 3, v49
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v48, 3, v48 :: v_dual_add_nc_u32 v39, 3, v39
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v37, 3, v37 :: v_dual_add_nc_u32 v34, 3, v34
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 3, v52
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-FAKE16-NEXT: .LBB15_5: ; %end
+; GFX13-FAKE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22478,6 +27642,46 @@ define <64 x bfloat> @bitcast_v32i32_to_v64bf16(<32 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v64bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_nc_u32 v31, 3, v31 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: .LBB16_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23291,6 +28495,91 @@ define inreg <64 x bfloat> @bitcast_v32i32_to_v64bf16_scalar(<32 x i32> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v64bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26237,6 +31526,62 @@ define <32 x i32> @bitcast_v64bf16_to_v32i32(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v32i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30017,6 +35362,150 @@ define inreg <32 x i32> @bitcast_v64bf16_to_v32i32_scalar(<64 x bfloat> inreg %a
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v32i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB19_5
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB19_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30480,6 +35969,46 @@ define <64 x half> @bitcast_v32i32_to_v64f16(<32 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v64f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_nc_u32 v31, 3, v31 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31128,6 +36657,91 @@ define inreg <64 x half> @bitcast_v32i32_to_v64f16_scalar(<32 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v64f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32087,6 +37701,62 @@ define <32 x i32> @bitcast_v64f16_to_v32i32(<64 x half> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v32i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33233,6 +38903,150 @@ define inreg <32 x i32> @bitcast_v64f16_to_v32i32_scalar(<64 x half> inreg %a, i
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v32i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB23_5
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB23_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33696,6 +39510,46 @@ define <64 x i16> @bitcast_v32i32_to_v64i16(<32 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v64i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_nc_u32 v31, 3, v31 :: v_dual_add_nc_u32 v30, 3, v30
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34344,6 +40198,91 @@ define inreg <64 x i16> @bitcast_v32i32_to_v64i16_scalar(<32 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i32_to_v64i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35133,6 +41072,62 @@ define <32 x i32> @bitcast_v64i16_to_v32i32(<64 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v32i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36136,6 +42131,150 @@ define inreg <32 x i32> @bitcast_v64i16_to_v32i32_scalar(<64 x i16> inreg %a, i3
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v32i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, s51, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s50, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s49, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s48, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s47, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s46, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s45, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s44, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s43, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s42, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s39, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s38, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s37, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s36, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v31, s67, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s66, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s65, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s64, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s63, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s62, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s61, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s60, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s59, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s58, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s56, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s55, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s54, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s53, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s52, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36339,6 +42478,46 @@ define <16 x i64> @bitcast_v32f32_to_v16i64(<32 x float> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v16i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_f32 v31, 1.0, v31 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB28_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36968,6 +43147,92 @@ define inreg <16 x i64> @bitcast_v32f32_to_v16i64_scalar(<32 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v16i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37195,6 +43460,70 @@ define <32 x float> @bitcast_v16i64_to_v32f32(<16 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v32f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v30, vcc_lo, v30, 3
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_co_ci_u32_e64 v31, null, 0, v31, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB30_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37600,6 +43929,76 @@ define inreg <32 x float> @bitcast_v16i64_to_v32f32_scalar(<16 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v32f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s5, v13
+; GFX13-NEXT: v_readfirstlane_b32 s4, v12
+; GFX13-NEXT: v_readfirstlane_b32 s7, v11
+; GFX13-NEXT: v_readfirstlane_b32 s6, v10
+; GFX13-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-NEXT: v_readfirstlane_b32 s8, v8
+; GFX13-NEXT: v_readfirstlane_b32 s11, v7
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-NEXT: v_readfirstlane_b32 s12, v4
+; GFX13-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-NEXT: v_readfirstlane_b32 s14, v2
+; GFX13-NEXT: v_readfirstlane_b32 s41, v1
+; GFX13-NEXT: v_readfirstlane_b32 s40, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB31_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s40 :: v_dual_mov_b32 v19, s41
+; GFX13-NEXT: v_dual_mov_b32 v20, s14 :: v_dual_mov_b32 v21, s15
+; GFX13-NEXT: v_dual_mov_b32 v22, s12 :: v_dual_mov_b32 v23, s13
+; GFX13-NEXT: v_dual_mov_b32 v24, s10 :: v_dual_mov_b32 v25, s11
+; GFX13-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v27, s9
+; GFX13-NEXT: v_dual_mov_b32 v28, s6 :: v_dual_mov_b32 v29, s7
+; GFX13-NEXT: v_dual_mov_b32 v30, s4 :: v_dual_mov_b32 v31, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37803,6 +44202,46 @@ define <16 x double> @bitcast_v32f32_to_v16f64(<32 x float> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v16f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_f32 v31, 1.0, v31 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB32_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38432,6 +44871,92 @@ define inreg <16 x double> @bitcast_v32f32_to_v16f64_scalar(<32 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v16f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38587,6 +45112,46 @@ define <32 x float> @bitcast_v16f64_to_v32f32(<16 x double> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v32f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_f64_e32 v[30:31], 1.0, v[30:31]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB34_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -39152,6 +45717,134 @@ define inreg <32 x float> @bitcast_v16f64_to_v32f32_scalar(<16 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v32f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[30:31], s[66:67], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[64:65], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB35_5
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB35_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -43134,6 +49827,850 @@ define <128 x i8> @bitcast_v32f32_to_v128i8(<32 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32f32_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x16
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: .LBB36_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB36_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v20, 1.0, v20 :: v_dual_add_f32 v19, 1.0, v19
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v18, 1.0, v18 :: v_dual_add_f32 v17, 1.0, v17
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v32, 1.0, v32 :: v_dual_add_f32 v31, 1.0, v31
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v16, 1.0, v16 :: v_dual_add_f32 v15, 1.0, v15
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v28, 1.0, v28 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v27, 1.0, v27
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v14, 1.0, v14 :: v_dual_add_f32 v13, 1.0, v13
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v12, 1.0, v12 :: v_dual_add_f32 v11, 1.0, v11
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v24, 1.0, v24 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v23, 1.0, v23
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v22, 1.0, v22 :: v_dual_add_f32 v21, 1.0, v21
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: .LBB36_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32f32_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x16
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: .LBB36_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB36_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v20, 1.0, v20 :: v_dual_add_f32 v19, 1.0, v19
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v18, 1.0, v18 :: v_dual_add_f32 v17, 1.0, v17
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v32, 1.0, v32 :: v_dual_add_f32 v31, 1.0, v31
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v16, 1.0, v16 :: v_dual_add_f32 v15, 1.0, v15
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v28, 1.0, v28 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v27, 1.0, v27
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v14, 1.0, v14 :: v_dual_add_f32 v13, 1.0, v13
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v12, 1.0, v12 :: v_dual_add_f32 v11, 1.0, v11
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v24, 1.0, v24 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v23, 1.0, v23
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v22, 1.0, v22 :: v_dual_add_f32 v21, 1.0, v21
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: .LBB36_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -47752,6 +55289,779 @@ define inreg <128 x i8> @bitcast_v32f32_to_v128i8_scalar(<32 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v23, s32 nv
+; GFX13-NEXT: scratch_store_b32 off, v24, s32 offset:4 nv
+; GFX13-NEXT: scratch_store_b32 off, v25, s32 offset:8 nv
+; GFX13-NEXT: scratch_store_b32 off, v26, s32 offset:12 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v23, s34, 0
+; GFX13-NEXT: v_writelane_b32 v23, s35, 1
+; GFX13-NEXT: v_writelane_b32 v23, s36, 2
+; GFX13-NEXT: v_writelane_b32 v23, s37, 3
+; GFX13-NEXT: v_writelane_b32 v23, s38, 4
+; GFX13-NEXT: v_writelane_b32 v23, s39, 5
+; GFX13-NEXT: v_writelane_b32 v23, s48, 6
+; GFX13-NEXT: v_writelane_b32 v23, s49, 7
+; GFX13-NEXT: v_writelane_b32 v23, s50, 8
+; GFX13-NEXT: v_writelane_b32 v23, s51, 9
+; GFX13-NEXT: v_writelane_b32 v23, s52, 10
+; GFX13-NEXT: v_writelane_b32 v23, s53, 11
+; GFX13-NEXT: v_writelane_b32 v23, s54, 12
+; GFX13-NEXT: v_writelane_b32 v23, s55, 13
+; GFX13-NEXT: v_writelane_b32 v23, s64, 14
+; GFX13-NEXT: v_writelane_b32 v23, s65, 15
+; GFX13-NEXT: v_writelane_b32 v23, s66, 16
+; GFX13-NEXT: v_writelane_b32 v23, s67, 17
+; GFX13-NEXT: v_writelane_b32 v23, s68, 18
+; GFX13-NEXT: v_writelane_b32 v23, s69, 19
+; GFX13-NEXT: v_writelane_b32 v23, s70, 20
+; GFX13-NEXT: v_writelane_b32 v23, s71, 21
+; GFX13-NEXT: v_writelane_b32 v23, s80, 22
+; GFX13-NEXT: v_writelane_b32 v23, s81, 23
+; GFX13-NEXT: v_writelane_b32 v23, s82, 24
+; GFX13-NEXT: v_writelane_b32 v23, s83, 25
+; GFX13-NEXT: v_writelane_b32 v23, s84, 26
+; GFX13-NEXT: v_writelane_b32 v23, s85, 27
+; GFX13-NEXT: v_writelane_b32 v23, s86, 28
+; GFX13-NEXT: v_writelane_b32 v23, s87, 29
+; GFX13-NEXT: v_writelane_b32 v23, s96, 30
+; GFX13-NEXT: v_writelane_b32 v23, s97, 31
+; GFX13-NEXT: v_writelane_b32 v24, s98, 0
+; GFX13-NEXT: v_writelane_b32 v24, s99, 1
+; GFX13-NEXT: v_writelane_b32 v24, s100, 2
+; GFX13-NEXT: v_writelane_b32 v24, s101, 3
+; GFX13-NEXT: v_writelane_b32 v24, s102, 4
+; GFX13-NEXT: v_writelane_b32 v24, s103, 5
+; GFX13-NEXT: v_writelane_b32 v24, s104, 6
+; GFX13-NEXT: v_writelane_b32 v24, s30, 7
+; GFX13-NEXT: v_writelane_b32 v24, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s5, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s7, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s9, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s13, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s15, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s103, 0
+; GFX13-NEXT: ; implicit-def: $vgpr26 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr25 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB37_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[4:5], 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 18
+; GFX13-NEXT: s_lshr_b32 s43, s12, 16
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[8:9], 24
+; GFX13-NEXT: s_lshr_b32 s31, s5, 24
+; GFX13-NEXT: s_lshr_b32 s104, s5, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 19
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s30, s5, 8
+; GFX13-NEXT: s_lshr_b32 s42, s4, 16
+; GFX13-NEXT: s_lshr_b32 s34, s4, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 20
+; GFX13-NEXT: s_lshr_b32 s43, s20, 16
+; GFX13-NEXT: s_lshr_b32 s35, s7, 24
+; GFX13-NEXT: s_lshr_b32 s37, s7, 16
+; GFX13-NEXT: s_lshr_b32 s36, s7, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 21
+; GFX13-NEXT: s_lshr_b32 s43, s20, 8
+; GFX13-NEXT: s_lshr_b32 s61, s6, 16
+; GFX13-NEXT: s_lshr_b32 s38, s6, 8
+; GFX13-NEXT: s_lshr_b32 s48, s9, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 22
+; GFX13-NEXT: s_lshr_b32 s43, s19, 8
+; GFX13-NEXT: s_lshr_b32 s39, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 8
+; GFX13-NEXT: s_lshr_b32 s44, s8, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 23
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 24
+; GFX13-NEXT: s_lshr_b32 s49, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 24
+; GFX13-NEXT: s_lshr_b32 s43, s18, 8
+; GFX13-NEXT: s_lshr_b32 s51, s10, 16
+; GFX13-NEXT: s_lshr_b32 s50, s10, 8
+; GFX13-NEXT: s_lshr_b32 s57, s13, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 25
+; GFX13-NEXT: s_lshr_b32 s43, s17, 24
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s59, s13, 8
+; GFX13-NEXT: s_lshr_b32 s58, s12, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 26
+; GFX13-NEXT: s_lshr_b32 s43, s17, 16
+; GFX13-NEXT: s_lshr_b32 s60, s15, 24
+; GFX13-NEXT: s_lshr_b32 s53, s15, 16
+; GFX13-NEXT: s_lshr_b32 s52, s15, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 27
+; GFX13-NEXT: s_lshr_b32 s43, s17, 8
+; GFX13-NEXT: s_lshr_b32 s62, s14, 16
+; GFX13-NEXT: s_lshr_b32 s63, s14, 8
+; GFX13-NEXT: s_lshr_b32 s54, s41, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 28
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s55, s41, 16
+; GFX13-NEXT: s_lshr_b32 s64, s41, 8
+; GFX13-NEXT: s_lshr_b32 s66, s40, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 29
+; GFX13-NEXT: s_lshr_b32 s43, s16, 8
+; GFX13-NEXT: s_lshr_b32 s65, s40, 8
+; GFX13-NEXT: s_lshr_b32 s69, s29, 24
+; GFX13-NEXT: s_lshr_b32 s71, s29, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 30
+; GFX13-NEXT: s_lshr_b32 s43, s3, 24
+; GFX13-NEXT: s_lshr_b32 s67, s29, 8
+; GFX13-NEXT: s_lshr_b32 s81, s28, 16
+; GFX13-NEXT: s_lshr_b32 s80, s28, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 31
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s82, s27, 24
+; GFX13-NEXT: v_writelane_b32 v25, s43, 0
+; GFX13-NEXT: s_lshr_b32 s43, s3, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: s_lshr_b32 s83, s27, 16
+; GFX13-NEXT: s_lshr_b32 s84, s27, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 1
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: s_lshr_b32 s86, s26, 16
+; GFX13-NEXT: s_lshr_b32 s85, s26, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 2
+; GFX13-NEXT: s_lshr_b32 s43, s2, 8
+; GFX13-NEXT: v_writelane_b32 v26, s74, 14
+; GFX13-NEXT: s_lshr_b32 s96, s25, 24
+; GFX13-NEXT: s_lshr_b32 s97, s25, 16
+; GFX13-NEXT: v_writelane_b32 v25, s43, 3
+; GFX13-NEXT: s_lshr_b32 s43, s1, 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 15
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[10:11], 24
+; GFX13-NEXT: s_lshr_b32 s87, s25, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 4
+; GFX13-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 12
+; GFX13-NEXT: s_lshr_b32 s99, s24, 16
+; GFX13-NEXT: s_lshr_b32 s98, s24, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 5
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 13
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[12:13], 24
+; GFX13-NEXT: s_lshr_b32 s101, s23, 24
+; GFX13-NEXT: v_writelane_b32 v25, s43, 6
+; GFX13-NEXT: s_lshr_b32 s43, s0, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 10
+; GFX13-NEXT: s_lshr_b32 s102, s23, 16
+; GFX13-NEXT: s_lshr_b32 s100, s23, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 7
+; GFX13-NEXT: s_lshr_b32 s43, s0, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 11
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_lshr_b32 s76, s22, 8
+; GFX13-NEXT: s_lshr_b32 s78, s21, 24
+; GFX13-NEXT: s_lshr_b32 s77, s21, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 8
+; GFX13-NEXT: s_lshr_b32 s68, s21, 8
+; GFX13-NEXT: s_lshr_b32 s79, s19, 24
+; GFX13-NEXT: s_lshr_b32 s70, s19, 16
+; GFX13-NEXT: v_writelane_b32 v25, s43, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 9
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[18:19], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 6
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[0:1], 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 7
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[28:29], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 4
+; GFX13-NEXT: v_writelane_b32 v26, s75, 5
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 2
+; GFX13-NEXT: v_writelane_b32 v26, s75, 3
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[24:25], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 0
+; GFX13-NEXT: v_writelane_b32 v26, s75, 1
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[22:23], 24
+; GFX13-NEXT: s_branch .LBB37_3
+; GFX13-NEXT: .LBB37_2:
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: s_mov_b32 s103, -1
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr100
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr30
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: v_writelane_b32 v26, s42, 0
+; GFX13-NEXT: v_writelane_b32 v26, s43, 1
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: v_writelane_b32 v26, s72, 2
+; GFX13-NEXT: v_writelane_b32 v26, s73, 3
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 4
+; GFX13-NEXT: v_writelane_b32 v26, s73, 5
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 6
+; GFX13-NEXT: v_writelane_b32 v26, s73, 7
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 8
+; GFX13-NEXT: v_writelane_b32 v26, s73, 9
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 10
+; GFX13-NEXT: v_writelane_b32 v26, s73, 11
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 12
+; GFX13-NEXT: v_writelane_b32 v26, s73, 13
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 14
+; GFX13-NEXT: v_writelane_b32 v26, s73, 15
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: .LBB37_3: ; %Flow
+; GFX13-NEXT: s_and_b32 s43, s103, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_mov_b32 s103, s31
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_mov_b32 s31, s42
+; GFX13-NEXT: s_mov_b32 s42, s61
+; GFX13-NEXT: s_mov_b32 s43, s48
+; GFX13-NEXT: v_readlane_b32 s48, v26, 18
+; GFX13-NEXT: v_readlane_b32 s61, v26, 19
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_lshr_b32 s72, s22, 16
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 20
+; GFX13-NEXT: s_lshr_b32 s72, s20, 16
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 21
+; GFX13-NEXT: s_lshr_b32 s72, s20, 8
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 22
+; GFX13-NEXT: s_lshr_b32 s72, s19, 8
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 23
+; GFX13-NEXT: s_lshr_b32 s72, s18, 16
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[8:9], 24
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 24
+; GFX13-NEXT: s_lshr_b32 s72, s18, 8
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 25
+; GFX13-NEXT: s_lshr_b32 s72, s17, 24
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 26
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 27
+; GFX13-NEXT: s_lshr_b32 s72, s17, 8
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 28
+; GFX13-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: v_writelane_b32 v26, s72, 29
+; GFX13-NEXT: s_lshr_b32 s72, s16, 8
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_lshr_b32 s103, s5, 24
+; GFX13-NEXT: s_lshr_b32 s104, s5, 16
+; GFX13-NEXT: v_writelane_b32 v26, s72, 30
+; GFX13-NEXT: s_lshr_b32 s72, s3, 24
+; GFX13-NEXT: s_lshr_b32 s30, s5, 8
+; GFX13-NEXT: s_lshr_b32 s31, s4, 16
+; GFX13-NEXT: s_lshr_b32 s34, s4, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 31
+; GFX13-NEXT: s_lshr_b32 s72, s3, 16
+; GFX13-NEXT: s_lshr_b32 s35, s7, 24
+; GFX13-NEXT: v_writelane_b32 v25, s72, 0
+; GFX13-NEXT: s_lshr_b32 s72, s3, 8
+; GFX13-NEXT: s_lshr_b32 s37, s7, 16
+; GFX13-NEXT: s_lshr_b32 s36, s7, 8
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 1
+; GFX13-NEXT: s_lshr_b32 s72, s2, 16
+; GFX13-NEXT: s_lshr_b32 s38, s6, 8
+; GFX13-NEXT: s_lshr_b32 s43, s9, 24
+; GFX13-NEXT: s_lshr_b32 s39, s9, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 2
+; GFX13-NEXT: s_lshr_b32 s72, s2, 8
+; GFX13-NEXT: s_lshr_b32 s45, s9, 8
+; GFX13-NEXT: s_lshr_b32 s48, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 3
+; GFX13-NEXT: s_lshr_b32 s72, s1, 24
+; GFX13-NEXT: s_lshr_b32 s47, s11, 24
+; GFX13-NEXT: s_lshr_b32 s49, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 4
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s51, s10, 16
+; GFX13-NEXT: s_lshr_b32 s50, s10, 8
+; GFX13-NEXT: s_lshr_b32 s57, s13, 24
+; GFX13-NEXT: v_writelane_b32 v25, s72, 5
+; GFX13-NEXT: s_lshr_b32 s72, s1, 8
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s59, s13, 8
+; GFX13-NEXT: s_lshr_b32 s61, s12, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 6
+; GFX13-NEXT: s_lshr_b32 s72, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s12, 8
+; GFX13-NEXT: s_lshr_b32 s60, s15, 24
+; GFX13-NEXT: s_lshr_b32 s53, s15, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 7
+; GFX13-NEXT: s_lshr_b32 s72, s0, 8
+; GFX13-NEXT: s_lshr_b32 s52, s15, 8
+; GFX13-NEXT: s_lshr_b32 s62, s14, 16
+; GFX13-NEXT: s_lshr_b32 s63, s14, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 8
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[4:5], 24
+; GFX13-NEXT: s_lshr_b32 s54, s41, 24
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: s_lshr_b32 s55, s41, 16
+; GFX13-NEXT: s_lshr_b32 s64, s41, 8
+; GFX13-NEXT: s_lshr_b32 s66, s40, 16
+; GFX13-NEXT: s_lshr_b32 s65, s40, 8
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: s_lshr_b32 s69, s29, 24
+; GFX13-NEXT: s_lshr_b32 s71, s29, 16
+; GFX13-NEXT: s_lshr_b32 s67, s29, 8
+; GFX13-NEXT: s_lshr_b32 s81, s28, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 14
+; GFX13-NEXT: s_lshr_b32 s80, s28, 8
+; GFX13-NEXT: s_lshr_b32 s82, s27, 24
+; GFX13-NEXT: s_lshr_b32 s83, s27, 16
+; GFX13-NEXT: s_lshr_b32 s84, s27, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 15
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[10:11], 24
+; GFX13-NEXT: s_lshr_b32 s86, s26, 16
+; GFX13-NEXT: s_lshr_b32 s85, s26, 8
+; GFX13-NEXT: s_lshr_b32 s96, s25, 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 12
+; GFX13-NEXT: s_lshr_b32 s97, s25, 16
+; GFX13-NEXT: s_lshr_b32 s87, s25, 8
+; GFX13-NEXT: s_lshr_b32 s99, s24, 16
+; GFX13-NEXT: s_lshr_b32 s98, s24, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 13
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[12:13], 24
+; GFX13-NEXT: s_lshr_b32 s101, s23, 24
+; GFX13-NEXT: s_lshr_b32 s102, s23, 16
+; GFX13-NEXT: s_lshr_b32 s100, s23, 8
+; GFX13-NEXT: v_writelane_b32 v26, s74, 10
+; GFX13-NEXT: s_lshr_b32 s76, s22, 8
+; GFX13-NEXT: s_lshr_b32 s78, s21, 24
+; GFX13-NEXT: s_lshr_b32 s77, s21, 16
+; GFX13-NEXT: s_lshr_b32 s68, s21, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 11
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_lshr_b32 s79, s19, 24
+; GFX13-NEXT: s_lshr_b32 s70, s19, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[6:7], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 8
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[2:3], 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 9
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[0:1], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 6
+; GFX13-NEXT: v_writelane_b32 v26, s75, 7
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[28:29], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 4
+; GFX13-NEXT: v_writelane_b32 v26, s75, 5
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 2
+; GFX13-NEXT: v_writelane_b32 v26, s75, 3
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[24:25], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 0
+; GFX13-NEXT: v_writelane_b32 v26, s75, 1
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[22:23], 24
+; GFX13-NEXT: .LBB37_5: ; %end
+; GFX13-NEXT: v_mov_b32_e32 v1, 0xc0c0004
+; GFX13-NEXT: v_readlane_b32 s73, v25, 7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v2, s73, vcc_lo, v1
+; GFX13-NEXT: v_readlane_b32 s73, v25, 8
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v3, s0, s73, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 6
+; GFX13-NEXT: v_perm_b32 v21, s70, s79, v1
+; GFX13-NEXT: v_perm_b32 v22, s77, s78, v1
+; GFX13-NEXT: v_perm_b32 v17, s21, s68, v1
+; GFX13-NEXT: v_readlane_b32 s70, v23, 20
+; GFX13-NEXT: v_perm_b32 v4, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 2
+; GFX13-NEXT: v_readlane_b32 s1, v25, 5
+; GFX13-NEXT: v_readlane_b32 s68, v23, 18
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v5, s0, s94, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 3
+; GFX13-NEXT: v_perm_b32 v6, s2, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v7, s3, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 29
+; GFX13-NEXT: v_perm_b32 v8, s0, s92, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v9, s16, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 28
+; GFX13-NEXT: v_perm_b32 v10, s17, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v11, s0, s90, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 25
+; GFX13-NEXT: v_perm_b32 v12, s18, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 23
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v13, s19, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 21
+; GFX13-NEXT: v_perm_b32 v14, s0, s88, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 20
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v15, s0, s74, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 22
+; GFX13-NEXT: v_perm_b32 v16, s20, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v18, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 31
+; GFX13-NEXT: v_readlane_b32 s1, v25, 0
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v19, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 26
+; GFX13-NEXT: v_readlane_b32 s1, v26, 27
+; GFX13-NEXT: v_or_b32_e32 v2, v3, v2
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v5 :: v_dual_bitop2_b32 v3, v4, v18 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v19
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_perm_b32 v20, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 0
+; GFX13-NEXT: v_readlane_b32 s1, v26, 1
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v4
+; GFX13-NEXT: v_or_b32_e32 v5, v7, v5
+; GFX13-NEXT: v_perm_b32 v6, s102, s101, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v14
+; GFX13-NEXT: v_perm_b32 v14, s7, s36, v1
+; GFX13-NEXT: v_readlane_b32 s102, v24, 4
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v8
+; GFX13-NEXT: v_dual_lshlrev_b32 v3, 16, v20 :: v_dual_lshlrev_b32 v4, 16, v11
+; GFX13-NEXT: v_dual_lshlrev_b32 v5, 16, v21 :: v_dual_lshlrev_b32 v8, 16, v22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v9, v2
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v4, v12, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v15 :: v_dual_bitop2_b32 v5, v13, v5 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v9, s22, s76, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v11, s25, s87, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:16
+; GFX13-NEXT: v_or_b32_e32 v2, v16, v7
+; GFX13-NEXT: v_perm_b32 v5, s99, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v3, v17, v8
+; GFX13-NEXT: v_perm_b32 v7, s23, s100, v1
+; GFX13-NEXT: v_perm_b32 v8, s97, s96, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 2
+; GFX13-NEXT: v_readlane_b32 s1, v26, 3
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v9, s24, s98, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v5 :: v_dual_lshlrev_b32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v12, s86, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v5, v7, v6
+; GFX13-NEXT: v_readlane_b32 s0, v26, 4
+; GFX13-NEXT: v_readlane_b32 s1, v26, 5
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v10
+; GFX13-NEXT: v_or_b32_e32 v7, v11, v8
+; GFX13-NEXT: v_perm_b32 v8, s26, s85, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v12
+; GFX13-NEXT: v_perm_b32 v10, s83, s82, v1
+; GFX13-NEXT: v_perm_b32 v11, s81, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:32
+; GFX13-NEXT: v_perm_b32 v2, s71, s69, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 6
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-NEXT: v_perm_b32 v9, s27, s84, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, s28, s80, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s29, s67, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v2
+; GFX13-NEXT: v_perm_b32 v12, s66, s0, v1
+; GFX13-NEXT: v_readlane_b32 s1, v26, 7
+; GFX13-NEXT: v_or_b32_e32 v9, v9, v3
+; GFX13-NEXT: v_readlane_b32 s0, v26, 8
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s55, s54, v1
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v5
+; GFX13-NEXT: v_perm_b32 v4, s40, s65, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v12
+; GFX13-NEXT: v_readlane_b32 s1, v26, 9
+; GFX13-NEXT: v_perm_b32 v11, s62, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[6:9], off offset:48
+; GFX13-NEXT: v_perm_b32 v6, s53, s60, v1
+; GFX13-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-NEXT: v_perm_b32 v5, s41, s64, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v10
+; GFX13-NEXT: v_readlane_b32 s0, v26, 10
+; GFX13-NEXT: v_readlane_b32 s1, v26, 11
+; GFX13-NEXT: v_perm_b32 v8, s14, s63, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s15, s52, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s61, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v5, v5, v7
+; GFX13-NEXT: v_readlane_b32 s0, v26, 12
+; GFX13-NEXT: v_readlane_b32 s1, v26, 13
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s56, s57, v1
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_perm_b32 v8, s12, s58, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v12
+; GFX13-NEXT: v_perm_b32 v11, s51, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:64
+; GFX13-NEXT: v_perm_b32 v2, s49, s47, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 14
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-NEXT: v_perm_b32 v9, s13, s59, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, s10, s50, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s11, s46, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v2
+; GFX13-NEXT: v_perm_b32 v12, s48, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v9, v9, v3
+; GFX13-NEXT: v_readlane_b32 s1, v26, 15
+; GFX13-NEXT: v_readlane_b32 s0, v26, 16
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s39, s43, v1
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v5
+; GFX13-NEXT: v_perm_b32 v4, s8, s44, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v12
+; GFX13-NEXT: v_perm_b32 v11, s42, s72, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v12, s6, s38, v1
+; GFX13-NEXT: v_readlane_b32 s1, v26, 17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v5, s9, s45, v1
+; GFX13-NEXT: v_readlane_b32 s101, v24, 3
+; GFX13-NEXT: v_readlane_b32 s100, v24, 2
+; GFX13-NEXT: v_readlane_b32 s99, v24, 1
+; GFX13-NEXT: v_readlane_b32 s98, v24, 0
+; GFX13-NEXT: v_or_b32_e32 v5, v5, v10
+; GFX13-NEXT: v_perm_b32 v10, s37, s35, v1
+; GFX13-NEXT: v_readlane_b32 s97, v23, 31
+; GFX13-NEXT: v_readlane_b32 s96, v23, 30
+; GFX13-NEXT: v_readlane_b32 s87, v23, 29
+; GFX13-NEXT: v_readlane_b32 s86, v23, 28
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v10 :: v_dual_bitop2_b32 v10, v12, v11 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v12, s31, s0, v1
+; GFX13-NEXT: v_readlane_b32 s85, v23, 27
+; GFX13-NEXT: v_readlane_b32 s84, v23, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v11, v14, v13
+; GFX13-NEXT: v_perm_b32 v13, s4, s34, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-NEXT: v_readlane_b32 s83, v23, 25
+; GFX13-NEXT: v_readlane_b32 s82, v23, 24
+; GFX13-NEXT: v_readlane_b32 s81, v23, 23
+; GFX13-NEXT: v_readlane_b32 s80, v23, 22
+; GFX13-NEXT: v_or_b32_e32 v12, v13, v12
+; GFX13-NEXT: v_perm_b32 v13, s104, s103, v1
+; GFX13-NEXT: v_perm_b32 v1, s5, s30, v1
+; GFX13-NEXT: v_readlane_b32 s30, v24, 7
+; GFX13-NEXT: v_readlane_b32 s31, v24, 8
+; GFX13-NEXT: v_readlane_b32 s104, v24, 6
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_readlane_b32 s103, v24, 5
+; GFX13-NEXT: v_readlane_b32 s71, v23, 21
+; GFX13-NEXT: v_readlane_b32 s69, v23, 19
+; GFX13-NEXT: v_readlane_b32 s67, v23, 17
+; GFX13-NEXT: v_or_b32_e32 v13, v1, v13
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[6:9], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[10:13], off offset:112
+; GFX13-NEXT: v_readlane_b32 s66, v23, 16
+; GFX13-NEXT: v_readlane_b32 s65, v23, 15
+; GFX13-NEXT: v_readlane_b32 s64, v23, 14
+; GFX13-NEXT: v_readlane_b32 s55, v23, 13
+; GFX13-NEXT: v_readlane_b32 s54, v23, 12
+; GFX13-NEXT: v_readlane_b32 s53, v23, 11
+; GFX13-NEXT: v_readlane_b32 s52, v23, 10
+; GFX13-NEXT: v_readlane_b32 s51, v23, 9
+; GFX13-NEXT: v_readlane_b32 s50, v23, 8
+; GFX13-NEXT: v_readlane_b32 s49, v23, 7
+; GFX13-NEXT: v_readlane_b32 s48, v23, 6
+; GFX13-NEXT: v_readlane_b32 s39, v23, 5
+; GFX13-NEXT: v_readlane_b32 s38, v23, 4
+; GFX13-NEXT: v_readlane_b32 s37, v23, 3
+; GFX13-NEXT: v_readlane_b32 s36, v23, 2
+; GFX13-NEXT: v_readlane_b32 s35, v23, 1
+; GFX13-NEXT: v_readlane_b32 s34, v23, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v23, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v24, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v25, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v26, off, s32 offset:12 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -53585,6 +61895,1627 @@ define <32 x float> @bitcast_v128i8_to_v32f32(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v32f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:360
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:324
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v40, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v41, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v42, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v43, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v44, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v45, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v46, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v47, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v56, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v57, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v58, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v59, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v60, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v61, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v62, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v63, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v72, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v74.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v75.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v76.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v77.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v78.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v79.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v88.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v89.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v90.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v91.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v92.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v93.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v94.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v95.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v104.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v105.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v106.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v107.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v108.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v109.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v110.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v111.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v120.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v121.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v122.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v123.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v124.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v125.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v126.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v127.l, v0.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v127, v126, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v125, v124, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v123, v122, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v121, v120, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v107, v106, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v105, v104, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v95, v94, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v111, v110, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v109, v108, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v93, v92, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v91, v90, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v89, v88, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v57, v56, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v47, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v45, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v43, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v183, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v179, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v177, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v164, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v163, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v151, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v135, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v133, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v117, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v115, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v103, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v101, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v99, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v83, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v81, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v48, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v34, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v29, v48, 16, v31
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v30, v36, 16, v38
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v31, v32, 16, v34
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr127_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr126_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr125_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr124_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr123_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr122_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr121_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr120_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr111_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr110_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr109_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr108_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr107_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr106_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr105_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr104_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr95_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr94_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr93_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr92_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr91_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr90_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr89_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr88_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: .LBB38_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB38_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v127.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v126.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v125.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v124.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v123.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v122.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v121.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v120.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v111.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v110.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v109.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v108.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v107.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v106.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v105.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v104.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v95.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v94.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v93.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v92.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v91.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v90.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v89.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v88.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v73.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v72.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v60.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.h, v10.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.h, v11.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v57.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v56.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v47.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v46.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, v43.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.l, 8, v42.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, v41.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.l, v13.l, v12.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v14.l, v13.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, v183.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.h, 8, v180.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, v177.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.h, 8, v166.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v12.h, v12.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v13.h, v13.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.l, v14.h, v14.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v15.h, v15.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v16.h, v16.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, v165.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.l, 8, v164.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, v163.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.l, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.l, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.l, 8, v150.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, v149.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v15.l, v14.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.l, v16.l, v15.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v17.l, v16.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.l, v18.l, v17.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.h, v19.l, v18.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.h, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.h, 8, v144.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.h, 8, v134.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, v133.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, v131.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.l, v17.h, v17.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.h, v18.h, v18.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.l, v19.h, v19.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.h, v20.h, v20.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.l, v21.h, v21.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.l, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.l, 8, v118.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, v117.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.l, 8, v116.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, v115.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.l, 8, v114.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, v113.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.l, 8, v112.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.h, v20.l, v19.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.l, v21.l, v20.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.h, v22.l, v21.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.l, v23.l, v22.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.h, v24.l, v23.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, v103.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.h, 8, v100.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, v99.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.h, 8, v86.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.l, v22.h, v22.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.h, v23.h, v23.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.l, v24.h, v24.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.h, v25.h, v25.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v26.h, v26.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, v85.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.l, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.l, 8, v82.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, v81.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.l, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, v71.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v25.l, v24.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.l, v26.l, v25.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v27.l, v26.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v28.l, v27.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v29.l, v28.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.h, 8, v66.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.h, 8, v50.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.l, v27.h, v27.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v28.h, v28.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v29.h, v29.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v30.h, v30.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.l, v31.h, v31.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.l, 8, v48.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.l, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v34.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v30.l, v29.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v31.l, v30.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v32.h, v31.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.l, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v32.l, v33.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v10.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v10.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v11.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v12.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v13.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v14.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v14.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v15.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v16.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v16.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v17.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v18.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v18.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v19.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v20.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v20.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v21.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v22.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v22.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v23.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v24.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v24.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v25.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v26.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v26.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v27.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v28.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v29.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v30.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v30.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v31.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v31.h
+; GFX13-TRUE16-NEXT: .LBB38_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_clause 0x1e ; 124-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1f
+; GFX13-TRUE16-NEXT: s_clause 0x10 ; 68-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v32f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v86, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v72, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v75, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v73, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v91, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v92, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v93, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v94, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v95, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v104, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v105, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v106, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v107, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v108, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v109, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v110, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v111, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v120, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v121, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v122, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v123, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v124, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v125, off, s32 offset:8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v126, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v127, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v30 :: v_dual_mov_b32 v33, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v28 :: v_dual_mov_b32 v35, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, v26 :: v_dual_mov_b32 v39, v25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v24 :: v_dual_mov_b32 v37, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v22 :: v_dual_mov_b32 v49, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v18 :: v_dual_mov_b32 v53, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v16 :: v_dual_mov_b32 v55, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, v14 :: v_dual_mov_b32 v65, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, v12 :: v_dual_mov_b32 v67, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, v10 :: v_dual_mov_b32 v69, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, v8 :: v_dual_mov_b32 v71, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v6 :: v_dual_mov_b32 v81, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, v4 :: v_dual_mov_b32 v83, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v2 :: v_dual_mov_b32 v85, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v84, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v66, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v64, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v48, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v127, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v126, v125, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v124, v123, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v122, v121, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v120, v111, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v110, v109, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v108, v107, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v106, v105, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v104, v95, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v94, v93, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v92, v91, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v88, v78, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v79, v77, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v74, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v76, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v62, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v58, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v182, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v40, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v166, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v164, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v150, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v160, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v147, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v148, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v134, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v130, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v119, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v128, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v116, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v103, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v112, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v34, v98, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v32, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v34, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: .LBB38_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB38_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v84, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v83
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v82, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v81
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v70, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v69
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v68, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v66, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v67
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v53
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v2, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v55
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v51
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v50, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v49
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v48, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v39
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v37
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v34, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v32, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v127
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v126, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v125
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v122, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v121
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v111
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v124, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v123
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v120, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v110, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v109
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v108, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v107
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v106, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v105
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v94, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v93
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v104, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v95
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v92, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v91
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v16, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v89
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v79, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v77
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v16, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v88, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v78
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v75
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v19, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v76, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v73
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v17, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v63
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v72, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v19, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v62, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v61
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v20, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v14, 16, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v21, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v57
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v59
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v60, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v47
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v56, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v45
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v20, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v21, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v43
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v42, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v41
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v183
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v182, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v181
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v24, 8, v179
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v177
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v22, v24, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v176, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v167
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v166, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v21, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v22, 16, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v24
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v164, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v160, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v151
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v25, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v149
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v148, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v144, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v30, 8, v135
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v147, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v31, 8, v145
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, v134, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v133
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v30, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v132, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v131
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v31, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v27, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v129
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v28, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v128, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v119, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v115
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v117
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v114, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v113
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, v112, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v99
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v34, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, v103, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v37, 8, v101
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v33, v32, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, v98, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v38, 8, v97
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v35, v36, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, v96, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v37, v34, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v38, v33, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v39, v36, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v30, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v34, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v33, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: .LBB38_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -57689,6 +67620,1124 @@ define inreg <32 x float> @bitcast_v128i8_to_v32f32_scalar(<128 x i8> inreg %a,
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v32f32_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB39_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v55, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v147, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v99, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v103, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v67, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-TRUE16-NEXT: s_branch .LBB39_3
+; GFX13-TRUE16-NEXT: .LBB39_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB39_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB39_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-TRUE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v135 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_4) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v99 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 3, v101
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v65
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 3, v49
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v26, v27
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v31, 3, v52 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 3, v67
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v55 :: v_dual_add_nc_u32 v48, 3, v48
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v39, 3, v39 :: v_dual_add_nc_u32 v37, 3, v37
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v34, 3, v34 :: v_dual_lshlrev_b32 v28, 16, v28
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-TRUE16-NEXT: .LBB39_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v32f32_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:196
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:68
+; GFX13-FAKE16-NEXT: s_clause 0x11
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB39_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v64, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v147, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v103, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v67, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-FAKE16-NEXT: s_branch .LBB39_3
+; GFX13-FAKE16-NEXT: .LBB39_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB39_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB39_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v144 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v100 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v24, 3, v101 :: v_dual_add_nc_u32 v28, 3, v84
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v65 :: v_dual_bitop2_b32 v24, v26, v27 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v64 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v67 :: v_dual_add_nc_u32 v49, 3, v49
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v48, 3, v48 :: v_dual_add_nc_u32 v39, 3, v39
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v37, 3, v37 :: v_dual_add_nc_u32 v34, 3, v34
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 3, v52
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-FAKE16-NEXT: .LBB39_5: ; %end
+; GFX13-FAKE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -58472,6 +69521,46 @@ define <64 x bfloat> @bitcast_v32f32_to_v64bf16(<32 x float> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v64bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_f32 v31, 1.0, v31 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: .LBB40_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -59499,6 +70588,91 @@ define inreg <64 x bfloat> @bitcast_v32f32_to_v64bf16_scalar(<32 x float> inreg
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v64bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: .LBB41_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -62445,6 +73619,62 @@ define <32 x float> @bitcast_v64bf16_to_v32f32(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v32f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB42_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -66225,6 +77455,150 @@ define inreg <32 x float> @bitcast_v64bf16_to_v32f32_scalar(<64 x bfloat> inreg
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v32f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB43_5
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB43_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -66672,6 +78046,46 @@ define <64 x half> @bitcast_v32f32_to_v64f16(<32 x float> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v64f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_f32 v31, 1.0, v31 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: .LBB44_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -67483,6 +78897,91 @@ define inreg <64 x half> @bitcast_v32f32_to_v64f16_scalar(<32 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v64f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: .LBB45_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -68442,6 +79941,62 @@ define <32 x float> @bitcast_v64f16_to_v32f32(<64 x half> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v32f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB46_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -69588,6 +81143,150 @@ define inreg <32 x float> @bitcast_v64f16_to_v32f32_scalar(<64 x half> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v32f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB47_5
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB47_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -70035,6 +81734,46 @@ define <64 x i16> @bitcast_v32f32_to_v64i16(<32 x float> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v64i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_dual_add_f32 v31, 1.0, v31 :: v_dual_add_f32 v30, 1.0, v30
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: .LBB48_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -70846,6 +82585,91 @@ define inreg <64 x i16> @bitcast_v32f32_to_v64i16_scalar(<32 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32f32_to_v64i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB49_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s40, s40, 1.0
+; GFX13-NEXT: s_add_f32 s41, s41, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: .LBB49_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s41 :: v_dual_mov_b32 v19, s40
+; GFX13-NEXT: v_dual_mov_b32 v20, s15 :: v_dual_mov_b32 v21, s14
+; GFX13-NEXT: v_dual_mov_b32 v22, s13 :: v_dual_mov_b32 v23, s12
+; GFX13-NEXT: v_dual_mov_b32 v24, s11 :: v_dual_mov_b32 v25, s10
+; GFX13-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
+; GFX13-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -71635,6 +83459,62 @@ define <32 x float> @bitcast_v64i16_to_v32f32(<64 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v32f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB50_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -72638,6 +84518,150 @@ define inreg <32 x float> @bitcast_v64i16_to_v32f32_scalar(<64 x i16> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v32f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, s51, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s50, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s49, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s48, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s47, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s46, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s45, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s44, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s43, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s42, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s39, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s38, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s37, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s36, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v31, s67, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s66, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s65, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s64, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s63, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s62, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s61, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s60, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s59, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s58, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s56, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s55, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s54, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s53, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s52, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_branch .LBB51_5
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB51_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -72865,6 +84889,70 @@ define <16 x double> @bitcast_v16i64_to_v16f64(<16 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v16f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v30, vcc_lo, v30, 3
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_co_ci_u32_e64 v31, null, 0, v31, vcc_lo
+; GFX13-NEXT: .LBB52_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -73269,6 +85357,75 @@ define inreg <16 x double> @bitcast_v16i64_to_v16f64_scalar(<16 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v16f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s5, v13
+; GFX13-NEXT: v_readfirstlane_b32 s4, v12
+; GFX13-NEXT: v_readfirstlane_b32 s7, v11
+; GFX13-NEXT: v_readfirstlane_b32 s6, v10
+; GFX13-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-NEXT: v_readfirstlane_b32 s8, v8
+; GFX13-NEXT: v_readfirstlane_b32 s11, v7
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-NEXT: v_readfirstlane_b32 s12, v4
+; GFX13-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-NEXT: v_readfirstlane_b32 s14, v2
+; GFX13-NEXT: v_readfirstlane_b32 s41, v1
+; GFX13-NEXT: v_readfirstlane_b32 s40, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB53_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s40 :: v_dual_mov_b32 v19, s41
+; GFX13-NEXT: v_dual_mov_b32 v20, s14 :: v_dual_mov_b32 v21, s15
+; GFX13-NEXT: v_dual_mov_b32 v22, s12 :: v_dual_mov_b32 v23, s13
+; GFX13-NEXT: v_dual_mov_b32 v24, s10 :: v_dual_mov_b32 v25, s11
+; GFX13-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v27, s9
+; GFX13-NEXT: v_dual_mov_b32 v28, s6 :: v_dual_mov_b32 v29, s7
+; GFX13-NEXT: v_dual_mov_b32 v30, s4 :: v_dual_mov_b32 v31, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -73424,6 +85581,46 @@ define <16 x i64> @bitcast_v16f64_to_v16i64(<16 x double> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v16i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_f64_e32 v[30:31], 1.0, v[30:31]
+; GFX13-NEXT: .LBB54_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -73989,6 +86186,134 @@ define inreg <16 x i64> @bitcast_v16f64_to_v16i64_scalar(<16 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v16i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[64:65], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[30:31], s[66:67], 1.0
+; GFX13-NEXT: s_branch .LBB55_5
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB55_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -78021,6 +90346,900 @@ define <128 x i8> @bitcast_v16i64_to_v128i8(<16 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i64_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x16
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v1, vcc_lo, v1, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v2, null, 0, v2, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, v3, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v4, null, 0, v4, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v5, vcc_lo, v5, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v6, null, 0, v6, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v7, vcc_lo, v7, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v8, null, 0, v8, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v9, vcc_lo, v9, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v10, null, 0, v10, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v11, vcc_lo, v11, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v12, null, 0, v12, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v13, vcc_lo, v13, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v14, null, 0, v14, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v15, vcc_lo, v15, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v16, null, 0, v16, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v17, vcc_lo, v17, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v18, null, 0, v18, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v19, vcc_lo, v19, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v20, null, 0, v20, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v21, vcc_lo, v21, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v22, null, 0, v22, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v25, vcc_lo, v25, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v26, null, 0, v26, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v27, vcc_lo, v27, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v28, null, 0, v28, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v29, vcc_lo, v29, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v30, null, 0, v30, vcc_lo
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_add_co_u32 v31, vcc_lo, v31, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v32, null, 0, v32, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v23, vcc_lo, v23, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v24, null, 0, v24, vcc_lo
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: .LBB56_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i64_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x16
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v1, vcc_lo, v1, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v2, null, 0, v2, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v3, vcc_lo, v3, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v4, null, 0, v4, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v5, vcc_lo, v5, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v6, null, 0, v6, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v7, vcc_lo, v7, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v8, null, 0, v8, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v9, vcc_lo, v9, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v10, null, 0, v10, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v11, vcc_lo, v11, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v12, null, 0, v12, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v13, vcc_lo, v13, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v14, null, 0, v14, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v15, vcc_lo, v15, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v16, null, 0, v16, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v17, vcc_lo, v17, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v18, null, 0, v18, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v19, vcc_lo, v19, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v20, null, 0, v20, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v21, vcc_lo, v21, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v22, null, 0, v22, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v25, vcc_lo, v25, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v26, null, 0, v26, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v27, vcc_lo, v27, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v28, null, 0, v28, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v29, vcc_lo, v29, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v30, null, 0, v30, vcc_lo
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_add_co_u32 v31, vcc_lo, v31, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v32, null, 0, v32, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v23, vcc_lo, v23, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v24, null, 0, v24, vcc_lo
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: .LBB56_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -81767,6 +94986,764 @@ define inreg <128 x i8> @bitcast_v16i64_to_v128i8_scalar(<16 x i64> inreg %a, i3
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v23, s32 nv
+; GFX13-NEXT: scratch_store_b32 off, v24, s32 offset:4 nv
+; GFX13-NEXT: scratch_store_b32 off, v25, s32 offset:8 nv
+; GFX13-NEXT: scratch_store_b32 off, v26, s32 offset:12 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v23, s34, 0
+; GFX13-NEXT: v_writelane_b32 v23, s35, 1
+; GFX13-NEXT: v_writelane_b32 v23, s36, 2
+; GFX13-NEXT: v_writelane_b32 v23, s37, 3
+; GFX13-NEXT: v_writelane_b32 v23, s38, 4
+; GFX13-NEXT: v_writelane_b32 v23, s39, 5
+; GFX13-NEXT: v_writelane_b32 v23, s48, 6
+; GFX13-NEXT: v_writelane_b32 v23, s49, 7
+; GFX13-NEXT: v_writelane_b32 v23, s50, 8
+; GFX13-NEXT: v_writelane_b32 v23, s51, 9
+; GFX13-NEXT: v_writelane_b32 v23, s52, 10
+; GFX13-NEXT: v_writelane_b32 v23, s53, 11
+; GFX13-NEXT: v_writelane_b32 v23, s54, 12
+; GFX13-NEXT: v_writelane_b32 v23, s55, 13
+; GFX13-NEXT: v_writelane_b32 v23, s64, 14
+; GFX13-NEXT: v_writelane_b32 v23, s65, 15
+; GFX13-NEXT: v_writelane_b32 v23, s66, 16
+; GFX13-NEXT: v_writelane_b32 v23, s67, 17
+; GFX13-NEXT: v_writelane_b32 v23, s68, 18
+; GFX13-NEXT: v_writelane_b32 v23, s69, 19
+; GFX13-NEXT: v_writelane_b32 v23, s70, 20
+; GFX13-NEXT: v_writelane_b32 v23, s71, 21
+; GFX13-NEXT: v_writelane_b32 v23, s80, 22
+; GFX13-NEXT: v_writelane_b32 v23, s81, 23
+; GFX13-NEXT: v_writelane_b32 v23, s82, 24
+; GFX13-NEXT: v_writelane_b32 v23, s83, 25
+; GFX13-NEXT: v_writelane_b32 v23, s84, 26
+; GFX13-NEXT: v_writelane_b32 v23, s85, 27
+; GFX13-NEXT: v_writelane_b32 v23, s86, 28
+; GFX13-NEXT: v_writelane_b32 v23, s87, 29
+; GFX13-NEXT: v_writelane_b32 v23, s96, 30
+; GFX13-NEXT: v_writelane_b32 v23, s97, 31
+; GFX13-NEXT: v_writelane_b32 v24, s98, 0
+; GFX13-NEXT: v_writelane_b32 v24, s99, 1
+; GFX13-NEXT: v_writelane_b32 v24, s100, 2
+; GFX13-NEXT: v_writelane_b32 v24, s101, 3
+; GFX13-NEXT: v_writelane_b32 v24, s102, 4
+; GFX13-NEXT: v_writelane_b32 v24, s103, 5
+; GFX13-NEXT: v_writelane_b32 v24, s104, 6
+; GFX13-NEXT: v_writelane_b32 v24, s30, 7
+; GFX13-NEXT: v_writelane_b32 v24, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s5, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s7, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s9, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s13, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s15, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s103, 0
+; GFX13-NEXT: ; implicit-def: $vgpr26 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr25 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB57_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[4:5], 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 18
+; GFX13-NEXT: s_lshr_b32 s43, s12, 16
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[8:9], 24
+; GFX13-NEXT: s_lshr_b32 s31, s5, 24
+; GFX13-NEXT: s_lshr_b32 s104, s5, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 19
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s30, s5, 8
+; GFX13-NEXT: s_lshr_b32 s42, s4, 16
+; GFX13-NEXT: s_lshr_b32 s34, s4, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 20
+; GFX13-NEXT: s_lshr_b32 s43, s20, 16
+; GFX13-NEXT: s_lshr_b32 s35, s7, 24
+; GFX13-NEXT: s_lshr_b32 s37, s7, 16
+; GFX13-NEXT: s_lshr_b32 s36, s7, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 21
+; GFX13-NEXT: s_lshr_b32 s43, s20, 8
+; GFX13-NEXT: s_lshr_b32 s61, s6, 16
+; GFX13-NEXT: s_lshr_b32 s38, s6, 8
+; GFX13-NEXT: s_lshr_b32 s48, s9, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 22
+; GFX13-NEXT: s_lshr_b32 s43, s19, 8
+; GFX13-NEXT: s_lshr_b32 s39, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 8
+; GFX13-NEXT: s_lshr_b32 s44, s8, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 23
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 24
+; GFX13-NEXT: s_lshr_b32 s49, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 24
+; GFX13-NEXT: s_lshr_b32 s43, s18, 8
+; GFX13-NEXT: s_lshr_b32 s51, s10, 16
+; GFX13-NEXT: s_lshr_b32 s50, s10, 8
+; GFX13-NEXT: s_lshr_b32 s57, s13, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 25
+; GFX13-NEXT: s_lshr_b32 s43, s17, 24
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s59, s13, 8
+; GFX13-NEXT: s_lshr_b32 s58, s12, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 26
+; GFX13-NEXT: s_lshr_b32 s43, s17, 16
+; GFX13-NEXT: s_lshr_b32 s60, s15, 24
+; GFX13-NEXT: s_lshr_b32 s53, s15, 16
+; GFX13-NEXT: s_lshr_b32 s52, s15, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 27
+; GFX13-NEXT: s_lshr_b32 s43, s17, 8
+; GFX13-NEXT: s_lshr_b32 s62, s14, 16
+; GFX13-NEXT: s_lshr_b32 s63, s14, 8
+; GFX13-NEXT: s_lshr_b32 s54, s41, 24
+; GFX13-NEXT: v_writelane_b32 v26, s43, 28
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s55, s41, 16
+; GFX13-NEXT: s_lshr_b32 s64, s41, 8
+; GFX13-NEXT: s_lshr_b32 s66, s40, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 29
+; GFX13-NEXT: s_lshr_b32 s43, s16, 8
+; GFX13-NEXT: s_lshr_b32 s65, s40, 8
+; GFX13-NEXT: s_lshr_b32 s69, s29, 24
+; GFX13-NEXT: s_lshr_b32 s71, s29, 16
+; GFX13-NEXT: v_writelane_b32 v26, s43, 30
+; GFX13-NEXT: s_lshr_b32 s43, s3, 24
+; GFX13-NEXT: s_lshr_b32 s67, s29, 8
+; GFX13-NEXT: s_lshr_b32 s81, s28, 16
+; GFX13-NEXT: s_lshr_b32 s80, s28, 8
+; GFX13-NEXT: v_writelane_b32 v26, s43, 31
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s82, s27, 24
+; GFX13-NEXT: v_writelane_b32 v25, s43, 0
+; GFX13-NEXT: s_lshr_b32 s43, s3, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: s_lshr_b32 s83, s27, 16
+; GFX13-NEXT: s_lshr_b32 s84, s27, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 1
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: s_lshr_b32 s86, s26, 16
+; GFX13-NEXT: s_lshr_b32 s85, s26, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 2
+; GFX13-NEXT: s_lshr_b32 s43, s2, 8
+; GFX13-NEXT: v_writelane_b32 v26, s74, 14
+; GFX13-NEXT: s_lshr_b32 s96, s25, 24
+; GFX13-NEXT: s_lshr_b32 s97, s25, 16
+; GFX13-NEXT: v_writelane_b32 v25, s43, 3
+; GFX13-NEXT: s_lshr_b32 s43, s1, 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 15
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[10:11], 24
+; GFX13-NEXT: s_lshr_b32 s87, s25, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 4
+; GFX13-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 12
+; GFX13-NEXT: s_lshr_b32 s99, s24, 16
+; GFX13-NEXT: s_lshr_b32 s98, s24, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 5
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 13
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[12:13], 24
+; GFX13-NEXT: s_lshr_b32 s101, s23, 24
+; GFX13-NEXT: v_writelane_b32 v25, s43, 6
+; GFX13-NEXT: s_lshr_b32 s43, s0, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 10
+; GFX13-NEXT: s_lshr_b32 s102, s23, 16
+; GFX13-NEXT: s_lshr_b32 s100, s23, 8
+; GFX13-NEXT: v_writelane_b32 v25, s43, 7
+; GFX13-NEXT: s_lshr_b32 s43, s0, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 11
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_lshr_b32 s76, s22, 8
+; GFX13-NEXT: s_lshr_b32 s78, s21, 24
+; GFX13-NEXT: s_lshr_b32 s77, s21, 16
+; GFX13-NEXT: v_writelane_b32 v26, s74, 8
+; GFX13-NEXT: s_lshr_b32 s68, s21, 8
+; GFX13-NEXT: s_lshr_b32 s79, s19, 24
+; GFX13-NEXT: s_lshr_b32 s70, s19, 16
+; GFX13-NEXT: v_writelane_b32 v25, s43, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 9
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[18:19], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 6
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[0:1], 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 7
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[28:29], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 4
+; GFX13-NEXT: v_writelane_b32 v26, s75, 5
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 2
+; GFX13-NEXT: v_writelane_b32 v26, s75, 3
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[24:25], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 0
+; GFX13-NEXT: v_writelane_b32 v26, s75, 1
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[22:23], 24
+; GFX13-NEXT: s_branch .LBB57_3
+; GFX13-NEXT: .LBB57_2:
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: s_mov_b32 s103, -1
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr100
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr30
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: v_writelane_b32 v26, s42, 0
+; GFX13-NEXT: v_writelane_b32 v26, s43, 1
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: v_writelane_b32 v26, s72, 2
+; GFX13-NEXT: v_writelane_b32 v26, s73, 3
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 4
+; GFX13-NEXT: v_writelane_b32 v26, s73, 5
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 6
+; GFX13-NEXT: v_writelane_b32 v26, s73, 7
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 8
+; GFX13-NEXT: v_writelane_b32 v26, s73, 9
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 10
+; GFX13-NEXT: v_writelane_b32 v26, s73, 11
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 12
+; GFX13-NEXT: v_writelane_b32 v26, s73, 13
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 14
+; GFX13-NEXT: v_writelane_b32 v26, s73, 15
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: .LBB57_3: ; %Flow
+; GFX13-NEXT: s_and_b32 s43, s103, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_mov_b32 s103, s31
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_mov_b32 s31, s42
+; GFX13-NEXT: s_mov_b32 s42, s61
+; GFX13-NEXT: s_mov_b32 s43, s48
+; GFX13-NEXT: v_readlane_b32 s48, v26, 18
+; GFX13-NEXT: v_readlane_b32 s61, v26, 19
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_lshr_b32 s72, s22, 16
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 20
+; GFX13-NEXT: s_lshr_b32 s72, s20, 16
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 21
+; GFX13-NEXT: s_lshr_b32 s72, s20, 8
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 22
+; GFX13-NEXT: s_lshr_b32 s72, s19, 8
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[8:9], 24
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 23
+; GFX13-NEXT: s_lshr_b32 s72, s18, 16
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: v_writelane_b32 v26, s72, 24
+; GFX13-NEXT: s_lshr_b32 s72, s18, 8
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_lshr_b32 s103, s5, 24
+; GFX13-NEXT: v_writelane_b32 v26, s72, 25
+; GFX13-NEXT: s_lshr_b32 s72, s17, 24
+; GFX13-NEXT: s_lshr_b32 s104, s5, 16
+; GFX13-NEXT: s_lshr_b32 s30, s5, 8
+; GFX13-NEXT: s_lshr_b32 s31, s4, 16
+; GFX13-NEXT: v_writelane_b32 v26, s72, 26
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s34, s4, 8
+; GFX13-NEXT: s_lshr_b32 s35, s7, 24
+; GFX13-NEXT: s_lshr_b32 s37, s7, 16
+; GFX13-NEXT: v_writelane_b32 v26, s72, 27
+; GFX13-NEXT: s_lshr_b32 s72, s17, 8
+; GFX13-NEXT: s_lshr_b32 s36, s7, 8
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s38, s6, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 28
+; GFX13-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 24
+; GFX13-NEXT: s_lshr_b32 s39, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 29
+; GFX13-NEXT: s_lshr_b32 s72, s16, 8
+; GFX13-NEXT: s_lshr_b32 s48, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 8
+; GFX13-NEXT: s_lshr_b32 s47, s11, 24
+; GFX13-NEXT: v_writelane_b32 v26, s72, 30
+; GFX13-NEXT: s_lshr_b32 s72, s3, 24
+; GFX13-NEXT: s_lshr_b32 s49, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 8
+; GFX13-NEXT: s_lshr_b32 s51, s10, 16
+; GFX13-NEXT: v_writelane_b32 v26, s72, 31
+; GFX13-NEXT: s_lshr_b32 s72, s3, 16
+; GFX13-NEXT: s_lshr_b32 s50, s10, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 0
+; GFX13-NEXT: s_lshr_b32 s72, s3, 8
+; GFX13-NEXT: s_lshr_b32 s57, s13, 24
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s59, s13, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 1
+; GFX13-NEXT: s_lshr_b32 s72, s2, 16
+; GFX13-NEXT: s_lshr_b32 s61, s12, 16
+; GFX13-NEXT: s_lshr_b32 s58, s12, 8
+; GFX13-NEXT: s_lshr_b32 s60, s15, 24
+; GFX13-NEXT: v_writelane_b32 v25, s72, 2
+; GFX13-NEXT: s_lshr_b32 s72, s2, 8
+; GFX13-NEXT: s_lshr_b32 s53, s15, 16
+; GFX13-NEXT: s_lshr_b32 s52, s15, 8
+; GFX13-NEXT: s_lshr_b32 s62, s14, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 3
+; GFX13-NEXT: s_lshr_b32 s72, s1, 24
+; GFX13-NEXT: s_lshr_b32 s63, s14, 8
+; GFX13-NEXT: s_lshr_b32 s54, s41, 24
+; GFX13-NEXT: s_lshr_b32 s55, s41, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 4
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s64, s41, 8
+; GFX13-NEXT: s_lshr_b32 s66, s40, 16
+; GFX13-NEXT: s_lshr_b32 s65, s40, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 5
+; GFX13-NEXT: s_lshr_b32 s72, s1, 8
+; GFX13-NEXT: s_lshr_b32 s69, s29, 24
+; GFX13-NEXT: s_lshr_b32 s71, s29, 16
+; GFX13-NEXT: s_lshr_b32 s67, s29, 8
+; GFX13-NEXT: v_writelane_b32 v25, s72, 6
+; GFX13-NEXT: s_lshr_b32 s72, s0, 16
+; GFX13-NEXT: s_lshr_b32 s81, s28, 16
+; GFX13-NEXT: s_lshr_b32 s80, s28, 8
+; GFX13-NEXT: s_lshr_b32 s82, s27, 24
+; GFX13-NEXT: v_writelane_b32 v25, s72, 7
+; GFX13-NEXT: s_lshr_b32 s72, s0, 8
+; GFX13-NEXT: s_lshr_b32 s83, s27, 16
+; GFX13-NEXT: s_lshr_b32 s84, s27, 8
+; GFX13-NEXT: s_lshr_b32 s86, s26, 16
+; GFX13-NEXT: v_writelane_b32 v25, s72, 8
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[4:5], 24
+; GFX13-NEXT: s_lshr_b32 s85, s26, 8
+; GFX13-NEXT: v_writelane_b32 v26, s72, 16
+; GFX13-NEXT: s_lshr_b32 s96, s25, 24
+; GFX13-NEXT: s_lshr_b32 s97, s25, 16
+; GFX13-NEXT: s_lshr_b32 s87, s25, 8
+; GFX13-NEXT: s_lshr_b32 s99, s24, 16
+; GFX13-NEXT: v_writelane_b32 v26, s73, 17
+; GFX13-NEXT: s_lshr_b32 s98, s24, 8
+; GFX13-NEXT: s_lshr_b32 s101, s23, 24
+; GFX13-NEXT: s_lshr_b32 s102, s23, 16
+; GFX13-NEXT: s_lshr_b32 s100, s23, 8
+; GFX13-NEXT: v_writelane_b32 v26, s74, 14
+; GFX13-NEXT: s_lshr_b32 s76, s22, 8
+; GFX13-NEXT: s_lshr_b32 s78, s21, 24
+; GFX13-NEXT: s_lshr_b32 s77, s21, 16
+; GFX13-NEXT: s_lshr_b32 s68, s21, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 15
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[10:11], 24
+; GFX13-NEXT: s_lshr_b32 s79, s19, 24
+; GFX13-NEXT: s_lshr_b32 s70, s19, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[6:7], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 12
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[2:3], 24
+; GFX13-NEXT: v_writelane_b32 v26, s75, 13
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[12:13], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[0:1], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 10
+; GFX13-NEXT: v_writelane_b32 v26, s75, 11
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 8
+; GFX13-NEXT: v_writelane_b32 v26, s75, 9
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[40:41], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 6
+; GFX13-NEXT: v_writelane_b32 v26, s75, 7
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[28:29], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 4
+; GFX13-NEXT: v_writelane_b32 v26, s75, 5
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v26, s74, 2
+; GFX13-NEXT: v_writelane_b32 v26, s75, 3
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[24:25], 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v26, s74, 0
+; GFX13-NEXT: v_writelane_b32 v26, s75, 1
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[22:23], 24
+; GFX13-NEXT: .LBB57_5: ; %end
+; GFX13-NEXT: v_mov_b32_e32 v1, 0xc0c0004
+; GFX13-NEXT: v_readlane_b32 s73, v25, 7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v2, s73, vcc_lo, v1
+; GFX13-NEXT: v_readlane_b32 s73, v25, 8
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v3, s0, s73, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 6
+; GFX13-NEXT: v_perm_b32 v21, s70, s79, v1
+; GFX13-NEXT: v_perm_b32 v22, s77, s78, v1
+; GFX13-NEXT: v_perm_b32 v17, s21, s68, v1
+; GFX13-NEXT: v_readlane_b32 s70, v23, 20
+; GFX13-NEXT: v_perm_b32 v4, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 2
+; GFX13-NEXT: v_readlane_b32 s1, v25, 5
+; GFX13-NEXT: v_readlane_b32 s68, v23, 18
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v5, s0, s94, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 3
+; GFX13-NEXT: v_perm_b32 v6, s2, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v7, s3, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 29
+; GFX13-NEXT: v_perm_b32 v8, s0, s92, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v9, s16, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 28
+; GFX13-NEXT: v_perm_b32 v10, s17, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v11, s0, s90, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 25
+; GFX13-NEXT: v_perm_b32 v12, s18, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 23
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v13, s19, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 21
+; GFX13-NEXT: v_perm_b32 v14, s0, s88, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 20
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v15, s0, s74, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 22
+; GFX13-NEXT: v_perm_b32 v16, s20, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v25, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v18, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 31
+; GFX13-NEXT: v_readlane_b32 s1, v25, 0
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v19, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 26
+; GFX13-NEXT: v_readlane_b32 s1, v26, 27
+; GFX13-NEXT: v_or_b32_e32 v2, v3, v2
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v5 :: v_dual_bitop2_b32 v3, v4, v18 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v19
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_perm_b32 v20, s1, s0, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 0
+; GFX13-NEXT: v_readlane_b32 s1, v26, 1
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v4
+; GFX13-NEXT: v_or_b32_e32 v5, v7, v5
+; GFX13-NEXT: v_perm_b32 v6, s102, s101, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v14
+; GFX13-NEXT: v_perm_b32 v14, s7, s36, v1
+; GFX13-NEXT: v_readlane_b32 s102, v24, 4
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v8
+; GFX13-NEXT: v_dual_lshlrev_b32 v3, 16, v20 :: v_dual_lshlrev_b32 v4, 16, v11
+; GFX13-NEXT: v_dual_lshlrev_b32 v5, 16, v21 :: v_dual_lshlrev_b32 v8, 16, v22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v9, v2
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v4, v12, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v15 :: v_dual_bitop2_b32 v5, v13, v5 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v9, s22, s76, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v11, s25, s87, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:16
+; GFX13-NEXT: v_or_b32_e32 v2, v16, v7
+; GFX13-NEXT: v_perm_b32 v5, s99, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v3, v17, v8
+; GFX13-NEXT: v_perm_b32 v7, s23, s100, v1
+; GFX13-NEXT: v_perm_b32 v8, s97, s96, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 2
+; GFX13-NEXT: v_readlane_b32 s1, v26, 3
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v9, s24, s98, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v5 :: v_dual_lshlrev_b32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v12, s86, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v5, v7, v6
+; GFX13-NEXT: v_readlane_b32 s0, v26, 4
+; GFX13-NEXT: v_readlane_b32 s1, v26, 5
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v10
+; GFX13-NEXT: v_or_b32_e32 v7, v11, v8
+; GFX13-NEXT: v_perm_b32 v8, s26, s85, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v12
+; GFX13-NEXT: v_perm_b32 v10, s83, s82, v1
+; GFX13-NEXT: v_perm_b32 v11, s81, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:32
+; GFX13-NEXT: v_perm_b32 v2, s71, s69, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 6
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-NEXT: v_perm_b32 v9, s27, s84, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, s28, s80, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s29, s67, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v2
+; GFX13-NEXT: v_perm_b32 v12, s66, s0, v1
+; GFX13-NEXT: v_readlane_b32 s1, v26, 7
+; GFX13-NEXT: v_or_b32_e32 v9, v9, v3
+; GFX13-NEXT: v_readlane_b32 s0, v26, 8
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s55, s54, v1
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v5
+; GFX13-NEXT: v_perm_b32 v4, s40, s65, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v12
+; GFX13-NEXT: v_readlane_b32 s1, v26, 9
+; GFX13-NEXT: v_perm_b32 v11, s62, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[6:9], off offset:48
+; GFX13-NEXT: v_perm_b32 v6, s53, s60, v1
+; GFX13-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-NEXT: v_perm_b32 v5, s41, s64, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v10
+; GFX13-NEXT: v_readlane_b32 s0, v26, 10
+; GFX13-NEXT: v_readlane_b32 s1, v26, 11
+; GFX13-NEXT: v_perm_b32 v8, s14, s63, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s15, s52, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s61, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v5, v5, v7
+; GFX13-NEXT: v_readlane_b32 s0, v26, 12
+; GFX13-NEXT: v_readlane_b32 s1, v26, 13
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s56, s57, v1
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_perm_b32 v8, s12, s58, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v12
+; GFX13-NEXT: v_perm_b32 v11, s51, s0, v1
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:64
+; GFX13-NEXT: v_perm_b32 v2, s49, s47, v1
+; GFX13-NEXT: v_readlane_b32 s0, v26, 14
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-NEXT: v_perm_b32 v9, s13, s59, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, s10, s50, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v11
+; GFX13-NEXT: v_perm_b32 v10, s11, s46, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v2
+; GFX13-NEXT: v_perm_b32 v12, s48, s0, v1
+; GFX13-NEXT: v_or_b32_e32 v9, v9, v3
+; GFX13-NEXT: v_readlane_b32 s1, v26, 15
+; GFX13-NEXT: v_readlane_b32 s0, v26, 16
+; GFX13-NEXT: v_or_b32_e32 v3, v10, v11
+; GFX13-NEXT: v_perm_b32 v10, s39, s43, v1
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v5
+; GFX13-NEXT: v_perm_b32 v4, s8, s44, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v12
+; GFX13-NEXT: v_perm_b32 v11, s42, s72, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v12, s6, s38, v1
+; GFX13-NEXT: v_readlane_b32 s1, v26, 17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v5, s9, s45, v1
+; GFX13-NEXT: v_readlane_b32 s101, v24, 3
+; GFX13-NEXT: v_readlane_b32 s100, v24, 2
+; GFX13-NEXT: v_readlane_b32 s99, v24, 1
+; GFX13-NEXT: v_readlane_b32 s98, v24, 0
+; GFX13-NEXT: v_or_b32_e32 v5, v5, v10
+; GFX13-NEXT: v_perm_b32 v10, s37, s35, v1
+; GFX13-NEXT: v_readlane_b32 s97, v23, 31
+; GFX13-NEXT: v_readlane_b32 s96, v23, 30
+; GFX13-NEXT: v_readlane_b32 s87, v23, 29
+; GFX13-NEXT: v_readlane_b32 s86, v23, 28
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v10 :: v_dual_bitop2_b32 v10, v12, v11 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v12, s31, s0, v1
+; GFX13-NEXT: v_readlane_b32 s85, v23, 27
+; GFX13-NEXT: v_readlane_b32 s84, v23, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v11, v14, v13
+; GFX13-NEXT: v_perm_b32 v13, s4, s34, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-NEXT: v_readlane_b32 s83, v23, 25
+; GFX13-NEXT: v_readlane_b32 s82, v23, 24
+; GFX13-NEXT: v_readlane_b32 s81, v23, 23
+; GFX13-NEXT: v_readlane_b32 s80, v23, 22
+; GFX13-NEXT: v_or_b32_e32 v12, v13, v12
+; GFX13-NEXT: v_perm_b32 v13, s104, s103, v1
+; GFX13-NEXT: v_perm_b32 v1, s5, s30, v1
+; GFX13-NEXT: v_readlane_b32 s30, v24, 7
+; GFX13-NEXT: v_readlane_b32 s31, v24, 8
+; GFX13-NEXT: v_readlane_b32 s104, v24, 6
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_readlane_b32 s103, v24, 5
+; GFX13-NEXT: v_readlane_b32 s71, v23, 21
+; GFX13-NEXT: v_readlane_b32 s69, v23, 19
+; GFX13-NEXT: v_readlane_b32 s67, v23, 17
+; GFX13-NEXT: v_or_b32_e32 v13, v1, v13
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[6:9], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[2:5], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[10:13], off offset:112
+; GFX13-NEXT: v_readlane_b32 s66, v23, 16
+; GFX13-NEXT: v_readlane_b32 s65, v23, 15
+; GFX13-NEXT: v_readlane_b32 s64, v23, 14
+; GFX13-NEXT: v_readlane_b32 s55, v23, 13
+; GFX13-NEXT: v_readlane_b32 s54, v23, 12
+; GFX13-NEXT: v_readlane_b32 s53, v23, 11
+; GFX13-NEXT: v_readlane_b32 s52, v23, 10
+; GFX13-NEXT: v_readlane_b32 s51, v23, 9
+; GFX13-NEXT: v_readlane_b32 s50, v23, 8
+; GFX13-NEXT: v_readlane_b32 s49, v23, 7
+; GFX13-NEXT: v_readlane_b32 s48, v23, 6
+; GFX13-NEXT: v_readlane_b32 s39, v23, 5
+; GFX13-NEXT: v_readlane_b32 s38, v23, 4
+; GFX13-NEXT: v_readlane_b32 s37, v23, 3
+; GFX13-NEXT: v_readlane_b32 s36, v23, 2
+; GFX13-NEXT: v_readlane_b32 s35, v23, 1
+; GFX13-NEXT: v_readlane_b32 s34, v23, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v23, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v24, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v25, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v26, off, s32 offset:12 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -87600,6 +101577,1627 @@ define <16 x i64> @bitcast_v128i8_to_v16i64(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v16i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:360
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:324
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v40, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v41, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v42, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v43, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v44, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v45, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v46, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v47, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v56, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v57, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v58, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v59, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v60, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v61, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v62, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v63, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v72, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v74.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v75.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v76.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v77.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v78.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v79.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v88.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v89.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v90.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v91.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v92.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v93.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v94.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v95.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v104.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v105.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v106.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v107.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v108.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v109.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v110.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v111.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v120.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v121.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v122.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v123.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v124.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v125.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v126.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v127.l, v0.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v127, v126, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v125, v124, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v123, v122, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v121, v120, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v107, v106, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v105, v104, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v95, v94, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v111, v110, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v109, v108, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v93, v92, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v91, v90, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v89, v88, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v57, v56, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v47, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v45, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v43, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v183, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v179, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v177, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v164, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v163, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v151, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v135, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v133, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v117, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v115, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v103, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v101, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v99, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v83, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v81, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v48, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v34, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v29, v48, 16, v31
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v30, v36, 16, v38
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v31, v32, 16, v34
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr127_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr126_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr125_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr124_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr123_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr122_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr121_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr120_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr111_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr110_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr109_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr108_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr107_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr106_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr105_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr104_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr95_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr94_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr93_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr92_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr91_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr90_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr89_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr88_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v127.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v126.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v125.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v124.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v123.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v122.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v121.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v120.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v111.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v110.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v109.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v108.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v107.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v106.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v105.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v104.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v95.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v94.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v93.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v92.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v91.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v90.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v89.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v88.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v73.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v72.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v60.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.h, v10.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.h, v11.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v57.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v56.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v47.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v46.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, v43.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.l, 8, v42.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, v41.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.l, v13.l, v12.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v14.l, v13.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, v183.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.h, 8, v180.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, v177.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.h, 8, v166.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v12.h, v12.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v13.h, v13.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.l, v14.h, v14.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v15.h, v15.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v16.h, v16.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, v165.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.l, 8, v164.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, v163.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.l, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.l, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.l, 8, v150.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, v149.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v15.l, v14.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.l, v16.l, v15.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v17.l, v16.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.l, v18.l, v17.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.h, v19.l, v18.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.h, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.h, 8, v144.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.h, 8, v134.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, v133.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, v131.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.l, v17.h, v17.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.h, v18.h, v18.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.l, v19.h, v19.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.h, v20.h, v20.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.l, v21.h, v21.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.l, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.l, 8, v118.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, v117.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.l, 8, v116.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, v115.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.l, 8, v114.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, v113.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.l, 8, v112.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.h, v20.l, v19.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.l, v21.l, v20.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.h, v22.l, v21.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.l, v23.l, v22.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.h, v24.l, v23.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, v103.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.h, 8, v100.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, v99.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.h, 8, v86.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.l, v22.h, v22.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.h, v23.h, v23.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.l, v24.h, v24.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.h, v25.h, v25.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v26.h, v26.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, v85.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.l, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.l, 8, v82.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, v81.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.l, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, v71.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v25.l, v24.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.l, v26.l, v25.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v27.l, v26.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v28.l, v27.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v29.l, v28.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.h, 8, v66.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.h, 8, v50.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.l, v27.h, v27.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v28.h, v28.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v29.h, v29.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v30.h, v30.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.l, v31.h, v31.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.l, 8, v48.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.l, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v34.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v30.l, v29.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v31.l, v30.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v32.h, v31.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.l, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v32.l, v33.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v10.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v10.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v11.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v12.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v13.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v14.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v14.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v15.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v16.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v16.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v17.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v18.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v18.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v19.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v20.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v20.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v21.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v22.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v22.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v23.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v24.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v24.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v25.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v26.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v26.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v27.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v28.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v29.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v30.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v30.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v31.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v31.h
+; GFX13-TRUE16-NEXT: .LBB58_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_clause 0x1e ; 124-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1f
+; GFX13-TRUE16-NEXT: s_clause 0x10 ; 68-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v16i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v86, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v72, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v75, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v73, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v91, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v92, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v93, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v94, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v95, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v104, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v105, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v106, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v107, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v108, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v109, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v110, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v111, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v120, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v121, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v122, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v123, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v124, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v125, off, s32 offset:8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v126, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v127, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v30 :: v_dual_mov_b32 v33, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v28 :: v_dual_mov_b32 v35, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, v26 :: v_dual_mov_b32 v39, v25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v24 :: v_dual_mov_b32 v37, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v22 :: v_dual_mov_b32 v49, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v18 :: v_dual_mov_b32 v53, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v16 :: v_dual_mov_b32 v55, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, v14 :: v_dual_mov_b32 v65, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, v12 :: v_dual_mov_b32 v67, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, v10 :: v_dual_mov_b32 v69, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, v8 :: v_dual_mov_b32 v71, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v6 :: v_dual_mov_b32 v81, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, v4 :: v_dual_mov_b32 v83, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v2 :: v_dual_mov_b32 v85, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v84, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v66, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v64, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v48, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v127, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v126, v125, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v124, v123, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v122, v121, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v120, v111, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v110, v109, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v108, v107, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v106, v105, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v104, v95, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v94, v93, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v92, v91, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v88, v78, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v79, v77, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v74, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v76, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v62, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v58, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v182, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v40, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v166, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v164, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v150, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v160, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v147, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v148, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v134, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v130, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v119, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v128, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v116, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v103, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v112, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v34, v98, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v32, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v34, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v84, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v83
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v82, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v81
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v70, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v69
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v68, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v66, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v67
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v53
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v2, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v55
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v51
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v50, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v49
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v48, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v39
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v37
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v34, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v32, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v127
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v126, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v125
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v122, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v121
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v111
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v124, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v123
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v120, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v110, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v109
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v108, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v107
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v106, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v105
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v94, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v93
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v104, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v95
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v92, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v91
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v16, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v89
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v79, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v77
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v16, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v88, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v78
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v75
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v19, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v76, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v73
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v17, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v63
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v72, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v19, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v62, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v61
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v20, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v14, 16, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v21, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v57
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v59
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v60, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v47
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v56, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v45
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v20, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v21, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v43
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v42, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v41
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v183
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v182, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v181
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v24, 8, v179
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v177
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v22, v24, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v176, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v167
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v166, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v21, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v22, 16, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v24
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v164, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v160, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v151
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v25, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v149
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v148, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v144, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v30, 8, v135
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v147, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v31, 8, v145
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, v134, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v133
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v30, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v132, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v131
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v31, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v27, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v129
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v28, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v128, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v119, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v115
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v117
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v114, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v113
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, v112, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v99
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v34, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, v103, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v37, 8, v101
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v33, v32, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, v98, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v38, 8, v97
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v35, v36, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, v96, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v37, v34, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v38, v33, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v39, v36, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v30, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v34, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v33, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: .LBB58_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -91704,6 +107302,1124 @@ define inreg <16 x i64> @bitcast_v128i8_to_v16i64_scalar(<128 x i8> inreg %a, i3
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v16i64_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v55, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v147, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v99, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v103, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v67, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-TRUE16-NEXT: s_branch .LBB59_3
+; GFX13-TRUE16-NEXT: .LBB59_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB59_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-TRUE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v135 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_4) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v99 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 3, v101
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v65
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 3, v49
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v26, v27
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v31, 3, v52 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 3, v67
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v55 :: v_dual_add_nc_u32 v48, 3, v48
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v39, 3, v39 :: v_dual_add_nc_u32 v37, 3, v37
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v34, 3, v34 :: v_dual_lshlrev_b32 v28, 16, v28
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v16i64_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:196
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:68
+; GFX13-FAKE16-NEXT: s_clause 0x11
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v64, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v147, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v103, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v67, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-FAKE16-NEXT: s_branch .LBB59_3
+; GFX13-FAKE16-NEXT: .LBB59_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB59_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v144 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v100 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v24, 3, v101 :: v_dual_add_nc_u32 v28, 3, v84
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v65 :: v_dual_bitop2_b32 v24, v26, v27 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v64 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v67 :: v_dual_add_nc_u32 v49, 3, v49
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v48, 3, v48 :: v_dual_add_nc_u32 v39, 3, v39
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v37, 3, v37 :: v_dual_add_nc_u32 v34, 3, v34
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 3, v52
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -92511,6 +109227,70 @@ define <64 x bfloat> @bitcast_v16i64_to_v64bf16(<16 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v64bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB60_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v30, vcc_lo, v30, 3
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_co_ci_u32_e64 v31, null, 0, v31, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: .LBB60_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -93297,6 +110077,75 @@ define inreg <64 x bfloat> @bitcast_v16i64_to_v64bf16_scalar(<16 x i64> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v64bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s5, v13
+; GFX13-NEXT: v_readfirstlane_b32 s4, v12
+; GFX13-NEXT: v_readfirstlane_b32 s7, v11
+; GFX13-NEXT: v_readfirstlane_b32 s6, v10
+; GFX13-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-NEXT: v_readfirstlane_b32 s8, v8
+; GFX13-NEXT: v_readfirstlane_b32 s11, v7
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-NEXT: v_readfirstlane_b32 s12, v4
+; GFX13-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-NEXT: v_readfirstlane_b32 s14, v2
+; GFX13-NEXT: v_readfirstlane_b32 s41, v1
+; GFX13-NEXT: v_readfirstlane_b32 s40, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB61_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: .LBB61_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s40 :: v_dual_mov_b32 v19, s41
+; GFX13-NEXT: v_dual_mov_b32 v20, s14 :: v_dual_mov_b32 v21, s15
+; GFX13-NEXT: v_dual_mov_b32 v22, s12 :: v_dual_mov_b32 v23, s13
+; GFX13-NEXT: v_dual_mov_b32 v24, s10 :: v_dual_mov_b32 v25, s11
+; GFX13-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v27, s9
+; GFX13-NEXT: v_dual_mov_b32 v28, s6 :: v_dual_mov_b32 v29, s7
+; GFX13-NEXT: v_dual_mov_b32 v30, s4 :: v_dual_mov_b32 v31, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -96243,6 +113092,62 @@ define <16 x i64> @bitcast_v64bf16_to_v16i64(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v16i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB62_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB62_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -100023,6 +116928,150 @@ define inreg <16 x i64> @bitcast_v64bf16_to_v16i64_scalar(<64 x bfloat> inreg %a
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v16i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB63_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB63_5
+; GFX13-NEXT: .LBB63_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB63_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -100494,6 +117543,70 @@ define <64 x half> @bitcast_v16i64_to_v64f16(<16 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v64f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB64_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v30, vcc_lo, v30, 3
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_co_ci_u32_e64 v31, null, 0, v31, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: .LBB64_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -101142,6 +118255,75 @@ define inreg <64 x half> @bitcast_v16i64_to_v64f16_scalar(<16 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v64f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s5, v13
+; GFX13-NEXT: v_readfirstlane_b32 s4, v12
+; GFX13-NEXT: v_readfirstlane_b32 s7, v11
+; GFX13-NEXT: v_readfirstlane_b32 s6, v10
+; GFX13-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-NEXT: v_readfirstlane_b32 s8, v8
+; GFX13-NEXT: v_readfirstlane_b32 s11, v7
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-NEXT: v_readfirstlane_b32 s12, v4
+; GFX13-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-NEXT: v_readfirstlane_b32 s14, v2
+; GFX13-NEXT: v_readfirstlane_b32 s41, v1
+; GFX13-NEXT: v_readfirstlane_b32 s40, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB65_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: .LBB65_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s40 :: v_dual_mov_b32 v19, s41
+; GFX13-NEXT: v_dual_mov_b32 v20, s14 :: v_dual_mov_b32 v21, s15
+; GFX13-NEXT: v_dual_mov_b32 v22, s12 :: v_dual_mov_b32 v23, s13
+; GFX13-NEXT: v_dual_mov_b32 v24, s10 :: v_dual_mov_b32 v25, s11
+; GFX13-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v27, s9
+; GFX13-NEXT: v_dual_mov_b32 v28, s6 :: v_dual_mov_b32 v29, s7
+; GFX13-NEXT: v_dual_mov_b32 v30, s4 :: v_dual_mov_b32 v31, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -102101,6 +119283,62 @@ define <16 x i64> @bitcast_v64f16_to_v16i64(<64 x half> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v16i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB66_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB66_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -103247,6 +120485,150 @@ define inreg <16 x i64> @bitcast_v64f16_to_v16i64_scalar(<64 x half> inreg %a, i
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v16i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB67_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB67_5
+; GFX13-NEXT: .LBB67_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB67_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -103718,6 +121100,70 @@ define <64 x i16> @bitcast_v16i64_to_v64i16(<16 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v64i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v30, vcc_lo, v30, 3
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_co_ci_u32_e64 v31, null, 0, v31, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: .LBB68_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -104366,6 +121812,75 @@ define inreg <64 x i16> @bitcast_v16i64_to_v64i16_scalar(<16 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s7 :: v_dual_mov_b32 v29, s6
; GFX11-NEXT: v_dual_mov_b32 v30, s5 :: v_dual_mov_b32 v31, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i64_to_v64i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s5, v13
+; GFX13-NEXT: v_readfirstlane_b32 s4, v12
+; GFX13-NEXT: v_readfirstlane_b32 s7, v11
+; GFX13-NEXT: v_readfirstlane_b32 s6, v10
+; GFX13-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-NEXT: v_readfirstlane_b32 s8, v8
+; GFX13-NEXT: v_readfirstlane_b32 s11, v7
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-NEXT: v_readfirstlane_b32 s12, v4
+; GFX13-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-NEXT: v_readfirstlane_b32 s14, v2
+; GFX13-NEXT: v_readfirstlane_b32 s41, v1
+; GFX13-NEXT: v_readfirstlane_b32 s40, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: .LBB69_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[40:41], s[40:41], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: .LBB69_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s40 :: v_dual_mov_b32 v19, s41
+; GFX13-NEXT: v_dual_mov_b32 v20, s14 :: v_dual_mov_b32 v21, s15
+; GFX13-NEXT: v_dual_mov_b32 v22, s12 :: v_dual_mov_b32 v23, s13
+; GFX13-NEXT: v_dual_mov_b32 v24, s10 :: v_dual_mov_b32 v25, s11
+; GFX13-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v27, s9
+; GFX13-NEXT: v_dual_mov_b32 v28, s6 :: v_dual_mov_b32 v29, s7
+; GFX13-NEXT: v_dual_mov_b32 v30, s4 :: v_dual_mov_b32 v31, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -105155,6 +122670,62 @@ define <16 x i64> @bitcast_v64i16_to_v16i64(<64 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v16i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB70_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -106158,6 +123729,150 @@ define inreg <16 x i64> @bitcast_v64i16_to_v16i64_scalar(<64 x i16> inreg %a, i3
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v16i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB71_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, s51, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s50, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s49, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s48, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s47, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s46, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s45, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s44, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s43, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s42, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s39, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s38, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s37, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s36, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v31, s67, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s66, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s65, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s64, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s63, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s62, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s61, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s60, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s59, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s58, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s56, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s55, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s54, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s53, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s52, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_branch .LBB71_5
+; GFX13-NEXT: .LBB71_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB71_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -110096,6 +127811,850 @@ define <128 x i8> @bitcast_v16f64_to_v128i8(<16 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16f64_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x16
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB72_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: .LBB72_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB72_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[19:20], 1.0, v[19:20]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[31:32], 1.0, v[31:32]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[17:18], 1.0, v[17:18]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[29:30], 1.0, v[29:30]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[15:16], 1.0, v[15:16]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[27:28], 1.0, v[27:28]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[13:14], 1.0, v[13:14]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[25:26], 1.0, v[25:26]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[11:12], 1.0, v[11:12]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[5:6], 1.0, v[5:6]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[23:24], 1.0, v[23:24]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[9:10], 1.0, v[9:10]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[3:4], 1.0, v[3:4]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[21:22], 1.0, v[21:22]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[7:8], 1.0, v[7:8]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[1:2], 1.0, v[1:2]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-TRUE16-NEXT: .LBB72_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16f64_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x16
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB72_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: .LBB72_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB72_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[19:20], 1.0, v[19:20]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[31:32], 1.0, v[31:32]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[17:18], 1.0, v[17:18]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[29:30], 1.0, v[29:30]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[15:16], 1.0, v[15:16]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[27:28], 1.0, v[27:28]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[13:14], 1.0, v[13:14]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[25:26], 1.0, v[25:26]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[11:12], 1.0, v[11:12]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[5:6], 1.0, v[5:6]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[23:24], 1.0, v[23:24]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[9:10], 1.0, v[9:10]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[3:4], 1.0, v[3:4]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[21:22], 1.0, v[21:22]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[7:8], 1.0, v[7:8]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[1:2], 1.0, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 24, v32 :: v_dual_lshrrev_b32 v69, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 8, v32 :: v_dual_lshrrev_b32 v71, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 8, v31 :: v_dual_lshrrev_b32 v81, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v30 :: v_dual_lshrrev_b32 v83, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v85, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v86, 24, v28 :: v_dual_lshrrev_b32 v87, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v96, 8, v28 :: v_dual_lshrrev_b32 v97, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v98, 8, v27 :: v_dual_lshrrev_b32 v99, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v100, 16, v26 :: v_dual_lshrrev_b32 v101, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v102, 16, v25 :: v_dual_lshrrev_b32 v103, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v112, 24, v24 :: v_dual_lshrrev_b32 v113, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v114, 8, v24 :: v_dual_lshrrev_b32 v115, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v116, 8, v23 :: v_dual_lshrrev_b32 v117, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v118, 16, v22 :: v_dual_lshrrev_b32 v119, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v128, 16, v21 :: v_dual_lshrrev_b32 v129, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v130, 24, v20 :: v_dual_lshrrev_b32 v131, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v132, 8, v20 :: v_dual_lshrrev_b32 v133, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v134, 8, v19 :: v_dual_lshrrev_b32 v135, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v144, 16, v18 :: v_dual_lshrrev_b32 v145, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 16, v17 :: v_dual_lshrrev_b32 v147, 8, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v148, 24, v16 :: v_dual_lshrrev_b32 v149, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v16 :: v_dual_lshrrev_b32 v151, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v160, 8, v15 :: v_dual_lshrrev_b32 v161, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v162, 16, v14 :: v_dual_lshrrev_b32 v163, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v164, 16, v13 :: v_dual_lshrrev_b32 v165, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v166, 24, v12 :: v_dual_lshrrev_b32 v167, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v176, 8, v12 :: v_dual_lshrrev_b32 v177, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v178, 8, v11 :: v_dual_lshrrev_b32 v179, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v180, 16, v10 :: v_dual_lshrrev_b32 v181, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v182, 16, v9 :: v_dual_lshrrev_b32 v183, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v40, 24, v8 :: v_dual_lshrrev_b32 v41, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v42, 8, v8 :: v_dual_lshrrev_b32 v43, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v44, 8, v7 :: v_dual_lshrrev_b32 v45, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v46, 16, v6 :: v_dual_lshrrev_b32 v47, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v56, 16, v5 :: v_dual_lshrrev_b32 v57, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v58, 24, v4 :: v_dual_lshrrev_b32 v59, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v60, 8, v4 :: v_dual_lshrrev_b32 v61, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v62, 8, v3 :: v_dual_lshrrev_b32 v63, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v72, 16, v2 :: v_dual_lshrrev_b32 v73, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v74, 16, v1 :: v_dual_lshrrev_b32 v75, 8, v1
+; GFX13-FAKE16-NEXT: .LBB72_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v74, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v62, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v61, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v60, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v59, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v44, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v43, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v65, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v55, v56, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v42, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, v41, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v54, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v182, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v53, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v177, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v54, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v55, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v64, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v65, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v54, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v164, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v151, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v149, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v146, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v133, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v131, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v128, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v118, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v115, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v113, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v102, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v97, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v87, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v84, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v71, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -114793,6 +133352,836 @@ define inreg <128 x i8> @bitcast_v16f64_to_v128i8_scalar(<16 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_or_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v74, s32 offset:72 nv
+; GFX13-NEXT: scratch_store_b32 off, v75, s32 offset:76 nv
+; GFX13-NEXT: scratch_store_b32 off, v76, s32 offset:80 nv
+; GFX13-NEXT: scratch_store_b32 off, v77, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v40, s32 offset:68 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v41, s32 offset:64 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v42, s32 offset:60 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v43, s32 offset:56 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v44, s32 offset:52 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v45, s32 offset:48 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v46, s32 offset:44 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v47, s32 offset:40 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v56, s32 offset:36 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v57, s32 offset:32 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v58, s32 offset:28 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v59, s32 offset:24 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v60, s32 offset:20 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v61, s32 offset:16 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v62, s32 offset:12 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v63, s32 offset:8 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v72, s32 offset:4 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v73, s32 nv
+; GFX13-NEXT: v_writelane_b32 v74, s34, 0
+; GFX13-NEXT: v_writelane_b32 v74, s35, 1
+; GFX13-NEXT: v_writelane_b32 v74, s36, 2
+; GFX13-NEXT: v_writelane_b32 v74, s37, 3
+; GFX13-NEXT: v_writelane_b32 v74, s38, 4
+; GFX13-NEXT: v_writelane_b32 v74, s39, 5
+; GFX13-NEXT: v_writelane_b32 v74, s48, 6
+; GFX13-NEXT: v_writelane_b32 v74, s49, 7
+; GFX13-NEXT: v_writelane_b32 v74, s50, 8
+; GFX13-NEXT: v_writelane_b32 v74, s51, 9
+; GFX13-NEXT: v_writelane_b32 v74, s52, 10
+; GFX13-NEXT: v_writelane_b32 v74, s53, 11
+; GFX13-NEXT: v_writelane_b32 v74, s54, 12
+; GFX13-NEXT: v_writelane_b32 v74, s55, 13
+; GFX13-NEXT: v_writelane_b32 v74, s64, 14
+; GFX13-NEXT: v_writelane_b32 v74, s65, 15
+; GFX13-NEXT: v_writelane_b32 v74, s66, 16
+; GFX13-NEXT: v_writelane_b32 v74, s67, 17
+; GFX13-NEXT: v_writelane_b32 v74, s68, 18
+; GFX13-NEXT: v_writelane_b32 v74, s69, 19
+; GFX13-NEXT: v_writelane_b32 v74, s70, 20
+; GFX13-NEXT: v_writelane_b32 v74, s71, 21
+; GFX13-NEXT: v_writelane_b32 v74, s80, 22
+; GFX13-NEXT: v_writelane_b32 v74, s81, 23
+; GFX13-NEXT: v_writelane_b32 v74, s82, 24
+; GFX13-NEXT: v_writelane_b32 v74, s83, 25
+; GFX13-NEXT: v_writelane_b32 v74, s84, 26
+; GFX13-NEXT: v_writelane_b32 v74, s85, 27
+; GFX13-NEXT: v_writelane_b32 v74, s86, 28
+; GFX13-NEXT: v_writelane_b32 v74, s87, 29
+; GFX13-NEXT: v_writelane_b32 v74, s96, 30
+; GFX13-NEXT: v_writelane_b32 v74, s97, 31
+; GFX13-NEXT: v_writelane_b32 v75, s98, 0
+; GFX13-NEXT: v_writelane_b32 v75, s99, 1
+; GFX13-NEXT: v_writelane_b32 v75, s100, 2
+; GFX13-NEXT: v_writelane_b32 v75, s101, 3
+; GFX13-NEXT: v_writelane_b32 v75, s102, 4
+; GFX13-NEXT: v_writelane_b32 v75, s103, 5
+; GFX13-NEXT: v_writelane_b32 v75, s104, 6
+; GFX13-NEXT: v_writelane_b32 v75, s30, 7
+; GFX13-NEXT: v_writelane_b32 v75, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s41, v14
+; GFX13-NEXT: v_readfirstlane_b32 s40, v13
+; GFX13-NEXT: v_readfirstlane_b32 s15, v12
+; GFX13-NEXT: v_readfirstlane_b32 s14, v11
+; GFX13-NEXT: v_readfirstlane_b32 s11, v10
+; GFX13-NEXT: v_readfirstlane_b32 s10, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s30, 0
+; GFX13-NEXT: ; implicit-def: $vgpr76 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr77 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB73_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s42, s11, 16
+; GFX13-NEXT: s_lshr_b32 s48, s41, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 0
+; GFX13-NEXT: s_lshr_b32 s42, s9, 24
+; GFX13-NEXT: s_lshr_b32 s39, s41, 16
+; GFX13-NEXT: s_lshr_b32 s38, s41, 8
+; GFX13-NEXT: s_lshr_b32 s50, s40, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s9, 16
+; GFX13-NEXT: s_lshr_b32 s49, s40, 8
+; GFX13-NEXT: s_lshr_b32 s37, s15, 24
+; GFX13-NEXT: s_lshr_b32 s36, s15, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s9, 8
+; GFX13-NEXT: s_lshr_b32 s35, s15, 8
+; GFX13-NEXT: s_lshr_b32 s52, s14, 16
+; GFX13-NEXT: s_lshr_b32 s51, s14, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s7, 24
+; GFX13-NEXT: s_lshr_b32 s34, s11, 24
+; GFX13-NEXT: s_lshr_b32 s104, s11, 8
+; GFX13-NEXT: s_lshr_b32 s54, s10, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s7, 16
+; GFX13-NEXT: s_lshr_b32 s53, s10, 8
+; GFX13-NEXT: s_lshr_b32 s64, s8, 16
+; GFX13-NEXT: s_lshr_b32 s55, s8, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s7, 8
+; GFX13-NEXT: s_lshr_b32 s66, s6, 16
+; GFX13-NEXT: s_lshr_b32 s65, s6, 8
+; GFX13-NEXT: s_lshr_b32 s68, s4, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s5, 24
+; GFX13-NEXT: s_lshr_b32 s67, s4, 8
+; GFX13-NEXT: s_lshr_b32 s70, s12, 16
+; GFX13-NEXT: s_lshr_b32 s69, s12, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s5, 16
+; GFX13-NEXT: s_lshr_b32 s80, s28, 16
+; GFX13-NEXT: s_lshr_b32 s71, s28, 8
+; GFX13-NEXT: s_lshr_b32 s82, s26, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 8
+; GFX13-NEXT: s_lshr_b32 s42, s5, 8
+; GFX13-NEXT: s_lshr_b32 s81, s26, 8
+; GFX13-NEXT: s_lshr_b32 s84, s24, 16
+; GFX13-NEXT: s_lshr_b32 s83, s24, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 9
+; GFX13-NEXT: s_lshr_b32 s42, s13, 24
+; GFX13-NEXT: s_lshr_b32 s86, s22, 16
+; GFX13-NEXT: s_lshr_b32 s85, s22, 8
+; GFX13-NEXT: s_lshr_b32 s96, s20, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 10
+; GFX13-NEXT: s_lshr_b32 s42, s13, 16
+; GFX13-NEXT: s_lshr_b32 s87, s20, 8
+; GFX13-NEXT: s_lshr_b32 s98, s18, 16
+; GFX13-NEXT: s_lshr_b32 s97, s18, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 11
+; GFX13-NEXT: s_lshr_b32 s42, s13, 8
+; GFX13-NEXT: s_lshr_b32 s100, s16, 16
+; GFX13-NEXT: s_lshr_b32 s99, s16, 8
+; GFX13-NEXT: s_lshr_b32 s102, s2, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 12
+; GFX13-NEXT: s_lshr_b32 s42, s29, 24
+; GFX13-NEXT: s_lshr_b32 s101, s2, 8
+; GFX13-NEXT: s_lshr_b32 s31, s0, 16
+; GFX13-NEXT: s_lshr_b32 s103, s0, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 13
+; GFX13-NEXT: s_lshr_b32 s42, s29, 16
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[14:15], 24
+; GFX13-NEXT: s_lshr_b64 s[76:77], s[10:11], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 14
+; GFX13-NEXT: s_lshr_b32 s42, s29, 8
+; GFX13-NEXT: s_lshr_b64 s[78:79], s[8:9], 24
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[4:5], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 15
+; GFX13-NEXT: s_lshr_b32 s42, s27, 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[12:13], 24
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[28:29], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b64 s[62:63], s[24:25], 24
+; GFX13-NEXT: s_lshr_b64 s[60:61], s[22:23], 24
+; GFX13-NEXT: s_lshr_b64 s[58:59], s[20:21], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 17
+; GFX13-NEXT: s_lshr_b32 s42, s27, 8
+; GFX13-NEXT: s_lshr_b64 s[56:57], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[46:47], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[44:45], s[2:3], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 18
+; GFX13-NEXT: s_lshr_b32 s42, s25, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 19
+; GFX13-NEXT: s_lshr_b32 s42, s25, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 20
+; GFX13-NEXT: s_lshr_b32 s42, s25, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 21
+; GFX13-NEXT: s_lshr_b32 s42, s23, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 22
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 23
+; GFX13-NEXT: s_lshr_b32 s42, s23, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 24
+; GFX13-NEXT: s_lshr_b32 s42, s21, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 25
+; GFX13-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 26
+; GFX13-NEXT: s_lshr_b32 s42, s21, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 27
+; GFX13-NEXT: s_lshr_b32 s42, s19, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 28
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 29
+; GFX13-NEXT: s_lshr_b32 s42, s19, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 30
+; GFX13-NEXT: s_lshr_b32 s42, s17, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 31
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 0
+; GFX13-NEXT: s_lshr_b32 s42, s17, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v77, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s3, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v77, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s3, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v77, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s1, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v77, s42, 7
+; GFX13-NEXT: s_lshr_b64 s[42:43], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB73_3
+; GFX13-NEXT: .LBB73_2:
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: s_mov_b32 s30, -1
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr103
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr100
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: .LBB73_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s43, s30, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[21:22], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[11:12], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[23:24], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[13:14], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[27:28], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[15:16], s[28:29], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[31:32], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[7:8], s[8:9], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[17:18], s[26:27], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[35:36], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[1:2], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[3:4], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[5:6], s[10:11], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[9:10], s[6:7], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[19:20], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[48:49], s[0:1], 1.0
+; GFX13-NEXT: v_lshrrev_b64 v[64:65], 24, v[21:22]
+; GFX13-NEXT: v_lshrrev_b64 v[50:51], 24, v[11:12]
+; GFX13-NEXT: v_lshrrev_b64 v[65:66], 24, v[23:24]
+; GFX13-NEXT: v_lshrrev_b64 v[51:52], 24, v[13:14]
+; GFX13-NEXT: v_lshrrev_b64 v[66:67], 24, v[27:28]
+; GFX13-NEXT: v_lshrrev_b64 v[52:53], 24, v[15:16]
+; GFX13-NEXT: v_lshrrev_b64 v[67:68], 24, v[31:32]
+; GFX13-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[53:54], 24, v[17:18]
+; GFX13-NEXT: v_lshrrev_b64 v[68:69], 24, v[35:36]
+; GFX13-NEXT: v_lshrrev_b64 v[25:26], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[29:30], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[33:34], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[38:39], 24, v[9:10]
+; GFX13-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-NEXT: v_lshrrev_b64 v[69:70], 24, v[48:49]
+; GFX13-NEXT: v_dual_lshrrev_b32 v39, 24, v2 :: v_dual_lshrrev_b32 v55, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v34, 8, v2 :: v_dual_lshrrev_b32 v30, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 8, v1 :: v_dual_lshrrev_b32 v82, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v83, 16, v4 :: v_dual_lshrrev_b32 v81, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v71, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v97, 24, v6 :: v_dual_lshrrev_b32 v98, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v86, 8, v6 :: v_dual_lshrrev_b32 v85, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v84, 8, v5 :: v_dual_lshrrev_b32 v102, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v103, 16, v8 :: v_dual_lshrrev_b32 v101, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v96, 16, v7 :: v_dual_lshrrev_b32 v87, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v114, 24, v10 :: v_dual_lshrrev_b32 v116, 16, v10
+; GFX13-NEXT: v_dual_lshrrev_b32 v115, 8, v10 :: v_dual_lshrrev_b32 v100, 16, v9
+; GFX13-NEXT: v_dual_lshrrev_b32 v99, 8, v9 :: v_dual_lshrrev_b32 v130, 24, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v131, 16, v12 :: v_dual_lshrrev_b32 v129, 8, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v113, 16, v11 :: v_dual_lshrrev_b32 v112, 8, v11
+; GFX13-NEXT: v_dual_lshrrev_b32 v134, 24, v14 :: v_dual_lshrrev_b32 v145, 16, v14
+; GFX13-NEXT: v_dual_lshrrev_b32 v144, 8, v14 :: v_dual_lshrrev_b32 v118, 16, v13
+; GFX13-NEXT: v_dual_lshrrev_b32 v117, 8, v13 :: v_dual_lshrrev_b32 v148, 24, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v150, 16, v16 :: v_dual_lshrrev_b32 v147, 8, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v128, 16, v15 :: v_dual_lshrrev_b32 v119, 8, v15
+; GFX13-NEXT: v_dual_lshrrev_b32 v162, 24, v18 :: v_dual_lshrrev_b32 v164, 16, v18
+; GFX13-NEXT: v_dual_lshrrev_b32 v163, 8, v18 :: v_dual_lshrrev_b32 v133, 16, v17
+; GFX13-NEXT: v_dual_lshrrev_b32 v132, 8, v17 :: v_dual_lshrrev_b32 v176, 24, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v179, 16, v20 :: v_dual_lshrrev_b32 v167, 8, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v146, 16, v19 :: v_dual_lshrrev_b32 v135, 8, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v182, 24, v22 :: v_dual_lshrrev_b32 v40, 16, v22
+; GFX13-NEXT: v_dual_lshrrev_b32 v183, 8, v22 :: v_dual_lshrrev_b32 v151, 16, v21
+; GFX13-NEXT: v_dual_lshrrev_b32 v149, 8, v21 :: v_dual_lshrrev_b32 v44, 24, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v45, 16, v24 :: v_dual_lshrrev_b32 v43, 8, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v161, 16, v23 :: v_dual_lshrrev_b32 v160, 8, v23
+; GFX13-NEXT: v_dual_lshrrev_b32 v46, 24, v28 :: v_dual_lshrrev_b32 v56, 16, v28
+; GFX13-NEXT: v_dual_lshrrev_b32 v47, 8, v28 :: v_dual_lshrrev_b32 v166, 16, v27
+; GFX13-NEXT: v_dual_lshrrev_b32 v165, 8, v27 :: v_dual_lshrrev_b32 v58, 24, v32
+; GFX13-NEXT: v_dual_lshrrev_b32 v59, 16, v32 :: v_dual_lshrrev_b32 v57, 8, v32
+; GFX13-NEXT: v_dual_lshrrev_b32 v178, 16, v31 :: v_dual_lshrrev_b32 v177, 8, v31
+; GFX13-NEXT: v_dual_lshrrev_b32 v60, 24, v36 :: v_dual_lshrrev_b32 v62, 16, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v61, 8, v36 :: v_dual_lshrrev_b32 v181, 16, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v180, 8, v35 :: v_dual_lshrrev_b32 v63, 24, v49
+; GFX13-NEXT: v_dual_lshrrev_b32 v72, 16, v49 :: v_dual_lshrrev_b32 v73, 8, v49
+; GFX13-NEXT: v_dual_lshrrev_b32 v41, 16, v48 :: v_dual_lshrrev_b32 v42, 8, v48
+; GFX13-NEXT: s_branch .LBB73_6
+; GFX13-NEXT: .LBB73_5:
+; GFX13-NEXT: v_dual_mov_b32 v48, s0 :: v_dual_mov_b32 v49, s1
+; GFX13-NEXT: v_readlane_b32 s0, v76, 0
+; GFX13-NEXT: v_dual_mov_b32 v97, s34 :: v_dual_mov_b32 v1, s40
+; GFX13-NEXT: v_dual_mov_b32 v2, s41 :: v_dual_mov_b32 v3, s14
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_mov_b32 v4, s15 :: v_dual_mov_b32 v98, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 1
+; GFX13-NEXT: v_dual_mov_b32 v86, s104 :: v_dual_mov_b32 v5, s10
+; GFX13-NEXT: v_dual_mov_b32 v6, s11 :: v_dual_mov_b32 v7, s8
+; GFX13-NEXT: v_dual_mov_b32 v8, s9 :: v_dual_mov_b32 v102, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 2
+; GFX13-NEXT: v_dual_mov_b32 v9, s6 :: v_dual_mov_b32 v10, s7
+; GFX13-NEXT: v_dual_mov_b32 v11, s4 :: v_dual_mov_b32 v12, s5
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v103, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 3
+; GFX13-NEXT: v_dual_mov_b32 v13, s12 :: v_dual_mov_b32 v14, s13
+; GFX13-NEXT: v_dual_mov_b32 v15, s28 :: v_dual_mov_b32 v16, s29
+; GFX13-NEXT: v_mov_b32_e32 v101, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 4
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s27
+; GFX13-NEXT: v_dual_mov_b32 v19, s24 :: v_dual_mov_b32 v20, s25
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v114, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 5
+; GFX13-NEXT: v_dual_mov_b32 v21, s22 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v23, s20 :: v_dual_mov_b32 v24, s21
+; GFX13-NEXT: v_mov_b32_e32 v116, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 6
+; GFX13-NEXT: v_dual_mov_b32 v27, s18 :: v_dual_mov_b32 v28, s19
+; GFX13-NEXT: v_dual_mov_b32 v31, s16 :: v_dual_mov_b32 v32, s17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v115, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 7
+; GFX13-NEXT: v_dual_mov_b32 v35, s2 :: v_dual_mov_b32 v36, s3
+; GFX13-NEXT: v_dual_mov_b32 v41, s31 :: v_dual_mov_b32 v42, s103
+; GFX13-NEXT: v_mov_b32_e32 v130, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 8
+; GFX13-NEXT: v_dual_mov_b32 v181, s102 :: v_dual_mov_b32 v180, s101
+; GFX13-NEXT: v_dual_mov_b32 v178, s100 :: v_dual_mov_b32 v177, s99
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v131, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 9
+; GFX13-NEXT: v_dual_mov_b32 v166, s98 :: v_dual_mov_b32 v165, s97
+; GFX13-NEXT: v_dual_mov_b32 v161, s96 :: v_dual_mov_b32 v160, s87
+; GFX13-NEXT: v_mov_b32_e32 v129, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 10
+; GFX13-NEXT: v_dual_mov_b32 v151, s86 :: v_dual_mov_b32 v149, s85
+; GFX13-NEXT: v_dual_mov_b32 v146, s84 :: v_dual_mov_b32 v135, s83
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v134, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 11
+; GFX13-NEXT: v_dual_mov_b32 v133, s82 :: v_dual_mov_b32 v132, s81
+; GFX13-NEXT: v_dual_mov_b32 v128, s80 :: v_dual_mov_b32 v119, s71
+; GFX13-NEXT: v_mov_b32_e32 v145, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 12
+; GFX13-NEXT: v_dual_mov_b32 v118, s70 :: v_dual_mov_b32 v117, s69
+; GFX13-NEXT: v_dual_mov_b32 v113, s68 :: v_dual_mov_b32 v112, s67
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v144, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 13
+; GFX13-NEXT: v_dual_mov_b32 v100, s66 :: v_dual_mov_b32 v99, s65
+; GFX13-NEXT: v_dual_mov_b32 v96, s64 :: v_dual_mov_b32 v87, s55
+; GFX13-NEXT: v_mov_b32_e32 v148, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 14
+; GFX13-NEXT: v_dual_mov_b32 v85, s54 :: v_dual_mov_b32 v84, s53
+; GFX13-NEXT: v_dual_mov_b32 v80, s52 :: v_dual_mov_b32 v71, s51
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v150, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 15
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v26, s49
+; GFX13-NEXT: v_dual_mov_b32 v39, s48 :: v_dual_mov_b32 v55, s39
+; GFX13-NEXT: v_mov_b32_e32 v147, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 16
+; GFX13-NEXT: v_dual_mov_b32 v34, s38 :: v_dual_mov_b32 v82, s37
+; GFX13-NEXT: v_dual_mov_b32 v83, s36 :: v_dual_mov_b32 v81, s35
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v162, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 17
+; GFX13-NEXT: v_dual_mov_b32 v69, s42 :: v_dual_mov_b32 v68, s44
+; GFX13-NEXT: v_dual_mov_b32 v67, s46 :: v_dual_mov_b32 v66, s56
+; GFX13-NEXT: v_mov_b32_e32 v164, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 18
+; GFX13-NEXT: v_dual_mov_b32 v65, s58 :: v_dual_mov_b32 v64, s60
+; GFX13-NEXT: v_dual_mov_b32 v54, s62 :: v_dual_mov_b32 v53, vcc_lo
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v163, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 19
+; GFX13-NEXT: v_dual_mov_b32 v52, s94 :: v_dual_mov_b32 v51, s92
+; GFX13-NEXT: v_dual_mov_b32 v50, s90 :: v_dual_mov_b32 v38, s88
+; GFX13-NEXT: v_mov_b32_e32 v176, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 20
+; GFX13-NEXT: v_dual_mov_b32 v37, s78 :: v_dual_mov_b32 v33, s76
+; GFX13-NEXT: v_dual_mov_b32 v29, s74 :: v_dual_mov_b32 v25, s72
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v179, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 21
+; GFX13-NEXT: v_mov_b32_e32 v167, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v182, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 23
+; GFX13-NEXT: v_mov_b32_e32 v40, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v183, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 25
+; GFX13-NEXT: v_mov_b32_e32 v44, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v45, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 27
+; GFX13-NEXT: v_mov_b32_e32 v43, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 28
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v46, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 29
+; GFX13-NEXT: v_mov_b32_e32 v56, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v47, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 31
+; GFX13-NEXT: v_mov_b32_e32 v58, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v59, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 1
+; GFX13-NEXT: v_mov_b32_e32 v57, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v60, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 3
+; GFX13-NEXT: v_mov_b32_e32 v62, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v61, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 5
+; GFX13-NEXT: v_mov_b32_e32 v63, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v72, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 7
+; GFX13-NEXT: v_mov_b32_e32 v73, s0
+; GFX13-NEXT: .LBB73_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v69, v41, v69, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v48, v48, v42, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v72, v63, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v68, v181, v68, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v181, v62, v60, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v35, v35, v180, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v70, 16, v70 :: v_dual_lshlrev_b32 v68, 16, v68
+; GFX13-NEXT: v_lshlrev_b32_e32 v180, 16, v181
+; GFX13-NEXT: v_perm_b32 v36, v36, v61, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v60, v48, v69
+; GFX13-NEXT: v_perm_b32 v48, v178, v67, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v49, v49, v73, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v62, v35, v68
+; GFX13-NEXT: v_or_b32_e32 v63, v36, v180
+; GFX13-NEXT: v_perm_b32 v35, v59, v58, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v36, 16, v48
+; GFX13-NEXT: v_perm_b32 v48, v166, v66, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v61, v49, v70
+; GFX13-NEXT: v_perm_b32 v32, v32, v57, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v49, v56, v46, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v35, 16, v35
+; GFX13-NEXT: v_perm_b32 v27, v27, v165, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v48, 16, v48
+; GFX13-NEXT: v_perm_b32 v31, v31, v177, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v28, v28, v47, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v49, 16, v49 :: v_dual_bitop2_b32 v67, v32, v35 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v68, v27, v48
+; GFX13-NEXT: v_perm_b32 v27, v161, v65, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v66, v31, v36
+; GFX13-NEXT: v_or_b32_e32 v69, v28, v49
+; GFX13-NEXT: v_perm_b32 v28, v45, v44, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v23, v23, v160, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v31, v151, v64, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v27, 16, v27
+; GFX13-NEXT: v_perm_b32 v24, v24, v43, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v28, 16, v28
+; GFX13-NEXT: v_perm_b32 v21, v21, v149, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-NEXT: v_or_b32_e32 v64, v23, v27
+; GFX13-NEXT: v_perm_b32 v23, v40, v182, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v27, v133, v53, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v65, v24, v28
+; GFX13-NEXT: v_perm_b32 v24, v179, v176, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v19, v19, v135, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_store_b128 v0, v[60:63], off
+; GFX13-NEXT: scratch_store_b128 v0, v[66:69], off offset:16
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v66, v21, v31 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v21, v22, v183, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v22, v146, v54, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v20, v20, v167, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v17, v17, v132, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v27, 16, v27
+; GFX13-NEXT: v_perm_b32 v15, v15, v119, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_perm_b32 v16, v16, v147, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v13, v117, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v12, v12, v129, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v9, v99, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v19, v19, v22
+; GFX13-NEXT: v_perm_b32 v22, v164, v162, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v67, v21, v23
+; GFX13-NEXT: v_or_b32_e32 v21, v17, v27
+; GFX13-NEXT: v_perm_b32 v17, v18, v163, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v18, v128, v52, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v20, v20, v24
+; GFX13-NEXT: v_perm_b32 v23, v150, v148, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v118, v51, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v11, v11, v112, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v7, v7, v87, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v8, v8, v101, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v5, v5, v84, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v16, v16, v23
+; GFX13-NEXT: v_perm_b32 v23, v131, v130, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v22, v17, v22
+; GFX13-NEXT: v_or_b32_e32 v17, v13, v24
+; GFX13-NEXT: v_perm_b32 v24, v100, v38, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v15, v15, v18
+; GFX13-NEXT: v_perm_b32 v18, v145, v134, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v14, v144, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v113, v50, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v6, v6, v86, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_bitop2_b32 v12, v12, v23 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v23, v103, v102, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v18, v13, v18
+; GFX13-NEXT: v_or_b32_e32 v13, v9, v24
+; GFX13-NEXT: v_perm_b32 v9, v10, v115, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v96, v37, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v85, v33, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v11, v11, v14
+; GFX13-NEXT: v_perm_b32 v14, v116, v114, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v3, v3, v71, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_bitop2_b32 v8, v8, v23 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v23, v83, v82, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v7, v7, v10
+; GFX13-NEXT: v_perm_b32 v10, v98, v97, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v14, v9, v14
+; GFX13-NEXT: v_or_b32_e32 v9, v5, v24
+; GFX13-NEXT: v_perm_b32 v5, v80, v29, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v30, v25, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v25, v55, v39, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v4, v4, v81, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_lshlrev_b32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v26, v1, v26, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v10, v6, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v27, v2, v34, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v23
+; GFX13-NEXT: v_or_b32_e32 v3, v26, v24
+; GFX13-NEXT: v_readlane_b32 s30, v75, 7
+; GFX13-NEXT: v_or_b32_e32 v4, v27, v25
+; GFX13-NEXT: s_clause 0x5
+; GFX13-NEXT: scratch_store_b128 v0, v[64:67], off offset:32
+; GFX13-NEXT: scratch_store_b128 v0, v[19:22], off offset:48
+; GFX13-NEXT: scratch_store_b128 v0, v[15:18], off offset:64
+; GFX13-NEXT: scratch_store_b128 v0, v[11:14], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[7:10], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off offset:112
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v73, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v72, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v63, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v62, off, s32 offset:12 nv
+; GFX13-NEXT: scratch_load_b32 v61, off, s32 offset:16 nv
+; GFX13-NEXT: scratch_load_b32 v60, off, s32 offset:20 nv
+; GFX13-NEXT: scratch_load_b32 v59, off, s32 offset:24 nv
+; GFX13-NEXT: scratch_load_b32 v58, off, s32 offset:28 nv
+; GFX13-NEXT: scratch_load_b32 v57, off, s32 offset:32 nv
+; GFX13-NEXT: scratch_load_b32 v56, off, s32 offset:36 nv
+; GFX13-NEXT: scratch_load_b32 v47, off, s32 offset:40 nv
+; GFX13-NEXT: scratch_load_b32 v46, off, s32 offset:44 nv
+; GFX13-NEXT: scratch_load_b32 v45, off, s32 offset:48 nv
+; GFX13-NEXT: scratch_load_b32 v44, off, s32 offset:52 nv
+; GFX13-NEXT: scratch_load_b32 v43, off, s32 offset:56 nv
+; GFX13-NEXT: scratch_load_b32 v42, off, s32 offset:60 nv
+; GFX13-NEXT: scratch_load_b32 v41, off, s32 offset:64 nv
+; GFX13-NEXT: scratch_load_b32 v40, off, s32 offset:68 nv
+; GFX13-NEXT: v_readlane_b32 s31, v75, 8
+; GFX13-NEXT: v_readlane_b32 s104, v75, 6
+; GFX13-NEXT: v_readlane_b32 s103, v75, 5
+; GFX13-NEXT: v_readlane_b32 s102, v75, 4
+; GFX13-NEXT: v_readlane_b32 s101, v75, 3
+; GFX13-NEXT: v_readlane_b32 s100, v75, 2
+; GFX13-NEXT: v_readlane_b32 s99, v75, 1
+; GFX13-NEXT: v_readlane_b32 s98, v75, 0
+; GFX13-NEXT: v_readlane_b32 s97, v74, 31
+; GFX13-NEXT: v_readlane_b32 s96, v74, 30
+; GFX13-NEXT: v_readlane_b32 s87, v74, 29
+; GFX13-NEXT: v_readlane_b32 s86, v74, 28
+; GFX13-NEXT: v_readlane_b32 s85, v74, 27
+; GFX13-NEXT: v_readlane_b32 s84, v74, 26
+; GFX13-NEXT: v_readlane_b32 s83, v74, 25
+; GFX13-NEXT: v_readlane_b32 s82, v74, 24
+; GFX13-NEXT: v_readlane_b32 s81, v74, 23
+; GFX13-NEXT: v_readlane_b32 s80, v74, 22
+; GFX13-NEXT: v_readlane_b32 s71, v74, 21
+; GFX13-NEXT: v_readlane_b32 s70, v74, 20
+; GFX13-NEXT: v_readlane_b32 s69, v74, 19
+; GFX13-NEXT: v_readlane_b32 s68, v74, 18
+; GFX13-NEXT: v_readlane_b32 s67, v74, 17
+; GFX13-NEXT: v_readlane_b32 s66, v74, 16
+; GFX13-NEXT: v_readlane_b32 s65, v74, 15
+; GFX13-NEXT: v_readlane_b32 s64, v74, 14
+; GFX13-NEXT: v_readlane_b32 s55, v74, 13
+; GFX13-NEXT: v_readlane_b32 s54, v74, 12
+; GFX13-NEXT: v_readlane_b32 s53, v74, 11
+; GFX13-NEXT: v_readlane_b32 s52, v74, 10
+; GFX13-NEXT: v_readlane_b32 s51, v74, 9
+; GFX13-NEXT: v_readlane_b32 s50, v74, 8
+; GFX13-NEXT: v_readlane_b32 s49, v74, 7
+; GFX13-NEXT: v_readlane_b32 s48, v74, 6
+; GFX13-NEXT: v_readlane_b32 s39, v74, 5
+; GFX13-NEXT: v_readlane_b32 s38, v74, 4
+; GFX13-NEXT: v_readlane_b32 s37, v74, 3
+; GFX13-NEXT: v_readlane_b32 s36, v74, 2
+; GFX13-NEXT: v_readlane_b32 s35, v74, 1
+; GFX13-NEXT: v_readlane_b32 s34, v74, 0
+; GFX13-NEXT: s_or_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v74, off, s32 offset:72 nv
+; GFX13-NEXT: scratch_load_b32 v75, off, s32 offset:76 nv
+; GFX13-NEXT: scratch_load_b32 v76, off, s32 offset:80 nv
+; GFX13-NEXT: scratch_load_b32 v77, off, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -120626,6 +140015,1627 @@ define <16 x double> @bitcast_v128i8_to_v16f64(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v16f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:360
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:324
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v40, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v41, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v42, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v43, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v44, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v45, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v46, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v47, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v56, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v57, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v58, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v59, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v60, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v61, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v62, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v63, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v72, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v74.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v75.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v76.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v77.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v78.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v79.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v88.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v89.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v90.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v91.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v92.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v93.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v94.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v95.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v104.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v105.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v106.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v107.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v108.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v109.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v110.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v111.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v120.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v121.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v122.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v123.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v124.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v125.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v126.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v127.l, v0.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB74_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v127, v126, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v125, v124, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v123, v122, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v121, v120, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v107, v106, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v105, v104, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v95, v94, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v111, v110, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v109, v108, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v93, v92, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v91, v90, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v89, v88, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v59, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v57, v56, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v47, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v45, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v43, v42, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v183, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v179, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v177, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v164, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v163, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v151, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v135, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v133, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v131, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v117, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v115, v114, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v113, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v103, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v101, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v99, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v87, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v83, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v81, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v48, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v34, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v29, v48, 16, v31
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v30, v36, 16, v38
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v31, v32, 16, v34
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr127_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr126_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr125_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr124_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr123_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr122_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr121_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr120_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr111_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr110_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr109_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr108_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr107_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr106_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr105_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr104_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr95_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr94_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr93_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr92_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr91_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr90_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr89_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr88_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: .LBB74_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB74_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v127.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v126.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v125.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v124.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v123.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v122.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v121.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v120.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v111.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v110.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v109.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v108.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v107.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v106.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v105.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v104.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v95.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v94.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v93.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v92.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v91.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v90.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v89.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v88.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v73.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v72.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v60.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.h, v10.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.h, v11.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v57.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v56.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v47.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v46.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, v43.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.l, 8, v42.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, v41.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.l, v13.l, v12.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v14.l, v13.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, v183.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v13.h, 8, v180.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v14.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, v177.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.h, 8, v166.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v12.h, v12.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v13.h, v13.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.l, v14.h, v14.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v15.h, v15.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v16.h, v16.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, v165.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v15.l, 8, v164.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, v163.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.l, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.l, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.l, 8, v150.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, v149.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v15.l, v14.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.l, v16.l, v15.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v17.l, v16.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.l, v18.l, v17.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v16.h, v19.l, v18.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.h, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v18.h, 8, v144.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v19.h, 8, v134.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, v133.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, v131.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.l, v17.h, v17.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v17.h, v18.h, v18.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.l, v19.h, v19.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v18.h, v20.h, v20.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.l, v21.h, v21.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v20.l, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v21.l, 8, v118.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, v117.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.l, 8, v116.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, v115.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.l, 8, v114.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, v113.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.l, 8, v112.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v19.h, v20.l, v19.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.l, v21.l, v20.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v20.h, v22.l, v21.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.l, v23.l, v22.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v21.h, v24.l, v23.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, v103.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v22.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v23.h, 8, v100.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, v99.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v24.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.h, 8, v86.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.l, v22.h, v22.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v22.h, v23.h, v23.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.l, v24.h, v24.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v23.h, v25.h, v25.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v26.h, v26.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, v85.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v25.l, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v26.l, 8, v82.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, v81.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.l, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, v71.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v25.l, v24.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.l, v26.l, v25.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v27.l, v26.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v28.l, v27.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v29.l, v28.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v27.h, 8, v66.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v28.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v29.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.h, 8, v50.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.l, v27.h, v27.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v28.h, v28.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v29.h, v29.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v30.h, v30.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.l, v31.h, v31.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v30.l, 8, v48.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v31.l, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v34.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v30.l, v29.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v31.l, v30.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v32.h, v31.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.l, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v32.l, v33.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v10.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v10.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v11.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v12.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v13.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v14.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v14.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v15.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v16.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v16.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v17.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v18.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v18.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v19.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v20.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v20.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v21.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v22.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v22.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v23.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v24.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v24.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v25.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v26.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v26.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v27.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v28.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v29.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v30.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v30.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v31.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v31.h
+; GFX13-TRUE16-NEXT: .LBB74_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_clause 0x1e ; 124-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1f
+; GFX13-TRUE16-NEXT: s_clause 0x10 ; 68-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v16f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v86, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v72, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v75, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v73, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v91, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v92, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v93, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v94, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v95, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v104, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v105, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v106, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v107, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v108, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v109, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v110, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v111, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v120, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v121, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v122, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v123, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v124, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v125, off, s32 offset:8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v126, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v127, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v30 :: v_dual_mov_b32 v33, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v28 :: v_dual_mov_b32 v35, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, v26 :: v_dual_mov_b32 v39, v25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v24 :: v_dual_mov_b32 v37, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v22 :: v_dual_mov_b32 v49, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v18 :: v_dual_mov_b32 v53, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v16 :: v_dual_mov_b32 v55, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, v14 :: v_dual_mov_b32 v65, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, v12 :: v_dual_mov_b32 v67, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, v10 :: v_dual_mov_b32 v69, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, v8 :: v_dual_mov_b32 v71, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v6 :: v_dual_mov_b32 v81, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, v4 :: v_dual_mov_b32 v83, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v2 :: v_dual_mov_b32 v85, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB74_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v84, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v82, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v66, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v64, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v48, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v127, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v126, v125, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v124, v123, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v122, v121, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v120, v111, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v110, v109, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v108, v107, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v106, v105, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v104, v95, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v94, v93, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v92, v91, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v88, v78, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v79, v77, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v74, v73, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v76, v75, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v72, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v62, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v58, v57, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v46, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v182, v181, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v40, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v180, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v26, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v166, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v164, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v162, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v150, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v160, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v147, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v148, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v134, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v31, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v130, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v119, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v128, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v116, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v103, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v112, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v34, v98, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v100, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v32, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v34, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: .LBB74_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB74_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v84, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v83
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v82, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v81
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v70, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v69
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v68, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v66, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v67
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v53
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v2, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v55
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v51
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v50, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v49
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v48, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v39
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v37
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v34, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v32, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v127
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v126, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v125
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v122, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v121
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v111
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v124, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v123
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v120, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v110, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v109
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v108, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v107
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v106, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v105
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v94, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v93
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v104, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v95
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v15, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v92, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v91
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v12
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v16, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v89
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v79, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v77
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v16, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v88, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v78
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v75
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v19, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v76, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v73
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v17, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v63
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v72, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v19, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v62, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v61
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v20, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v14, 16, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v21, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v57
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v59
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v19, 16, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v60, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v21, 8, v47
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v18, v17, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v56, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v45
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v20, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v21, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v43
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v42, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v41
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v183
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v182, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v181
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v20, v22, v20, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v24, 8, v179
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v177
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v21, v23, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v22, v24, v22, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v176, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v167
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, v166, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v26, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v21, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v22, 16, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v24
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v23, v26, v25, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, v164, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v160, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v151
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v24, v25, v24, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v25, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v149
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, v148, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v144, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v30, 8, v135
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v147, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v31, 8, v145
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v27, v26, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, v134, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v133
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v30, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v132, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v131
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v31, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v27, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v129
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v28, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v30, 16, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, v128, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v29, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, v119, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v115
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v117
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v29, v28, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, v114, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v113
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v32, v31, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v33, v30, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, v112, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v99
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v34, v29, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, v103, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v37, 8, v101
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v33, v32, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, v98, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v38, 8, v97
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v35, v36, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, v96, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v37, v34, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v38, v33, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v39, v36, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v30, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v29, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v34, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v33, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v36, 16, v35
+; GFX13-FAKE16-NEXT: .LBB74_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -124730,6 +145740,1124 @@ define inreg <16 x double> @bitcast_v128i8_to_v16f64_scalar(<128 x i8> inreg %a,
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v16f64_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB75_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v55, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v147, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v99, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v103, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v67, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-TRUE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-TRUE16-NEXT: s_branch .LBB75_3
+; GFX13-TRUE16-NEXT: .LBB75_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB75_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB75_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-TRUE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v135 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v17, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_4) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v99 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v22, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 3, v101
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 3, v65
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 3, v49
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v26, v27
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v31, 3, v52 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 3, v67
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v30, 3, v55 :: v_dual_add_nc_u32 v48, 3, v48
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v39, 3, v39 :: v_dual_add_nc_u32 v37, 3, v37
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v34, 3, v34 :: v_dual_lshlrev_b32 v28, 16, v28
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v27, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-TRUE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-TRUE16-NEXT: .LBB75_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v16f64_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:196
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:68
+; GFX13-FAKE16-NEXT: s_clause 0x11
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB75_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v182, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v165, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v150, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v119, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v102, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v85, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v70, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s74, s73, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v3, 16, v4 :: v_dual_bitop2_b32 v1, v3, v1 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v0, v2, v0 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s56, s47, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v2, v2, v3
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s40, s15, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s6, s5, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v8, 16, v4 :: v_dual_bitop2_b32 v4, v5, v6 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v64, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v7, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s46, s45, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v8, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s42, s41, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v9, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v9, v8
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v12, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v181, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v16, 16, v12 :: v_dual_bitop2_b32 v12, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v163, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v13, v15, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v167, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v16, 16, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v164, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v18, 16, v14 :: v_dual_bitop2_b32 v14, v15, v16 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v146, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v17, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v161, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v147, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v20, 16, v16 :: v_dual_bitop2_b32 v16, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v129, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v17, v19, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v145, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v132, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v22, 16, v18 :: v_dual_bitop2_b32 v18, v19, v20 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v114, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v128, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v117, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v20 :: v_dual_bitop2_b32 v20, v21, v22 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v100, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v21, v23, v24
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v103, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v24, 16, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v101, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v26, 16, v22 :: v_dual_bitop2_b32 v22, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v83, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v25, v26
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v96, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v84, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v28, 16, v24 :: v_dual_bitop2_b32 v24, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v66, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v27, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v81, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v67, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v30, 16, v26 :: v_dual_bitop2_b32 v26, v27, v28 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v29, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v65, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v183, 16, v28 :: v_dual_bitop2_b32 v28, v29, v30 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v183
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v183, 16, v40
+; GFX13-FAKE16-NEXT: v_perm_b32 v40, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v41, 16, v30 :: v_dual_bitop2_b32 v30, v31, v183 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v40, v41
+; GFX13-FAKE16-NEXT: s_branch .LBB75_3
+; GFX13-FAKE16-NEXT: .LBB75_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB75_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB75_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s26, s27, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s24, s25, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s62, s61, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v5, 16, v5 :: v_dual_bitop2_b32 v1, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s20, s21, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s22, s23, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s46, s45, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s72, s63, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v2, v2, v3 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v3, v4, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s74, s73, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s56, s47, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s14, s13, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v4, v4, v5
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v5, v6, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s60, s59, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s58, s57, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s40, s15, v10
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s8, s7, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v161 :: v_dual_add_nc_u32 v21, 3, v150
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v6, v6, v7
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v7, v8, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s44, s43, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s41, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v18, 3, v164 :: v_dual_add_nc_u32 v19, 3, v163
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, s4, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v148, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v8, v8, v9
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s12, s11, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s10, s9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s6, s5, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_lshlrev_b32 v14, 16, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v165
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v11, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v14, 3, v180 :: v_dual_bitop2_b32 v11, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v12, 3, v182 :: v_dual_add_nc_u32 v13, 3, v181
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v14, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v178, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v13, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v19, 16, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 3, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v17, 16, v17 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v12
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v15, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v21, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v129 :: v_dual_bitop2_b32 v12, v16, v12 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v20, 3, v144 :: v_dual_bitop2_b32 v16, v20, v21 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v117 :: v_dual_bitop2_b32 v13, v13, v14 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v114
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v20, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v128 :: v_dual_add_nc_u32 v24, 3, v119
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v14, v15, v17
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v145 :: v_dual_bitop2_b32 v15, v18, v19 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v20
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 3, v147
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v19, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v18, v134, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v20, 16, v20
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v17, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v21, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v116, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v26, 16, v26
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v17, v17, v18 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v18, v19, v20
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v19, v21, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v100 :: v_dual_bitop2_b32 v21, v25, v26 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v22, 3, v103 :: v_dual_add_nc_u32 v27, 3, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 3, v83
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v25, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v102 :: v_dual_bitop2_b32 v20, v23, v24 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v24, 3, v101 :: v_dual_add_nc_u32 v28, 3, v84
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v22, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v23, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v24, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v81 :: v_dual_add_nc_u32 v31, 3, v70
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 3, v96
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v80, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v24
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v26, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v27, 16, v27 :: v_dual_lshlrev_b32 v29, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 16, v31
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v22, v22, v23
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v23, v24, v25
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v28, 3, v66 :: v_dual_bitop2_b32 v25, v28, v29 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v65 :: v_dual_bitop2_b32 v24, v26, v27 bitop3:0x54
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v30, 3, v64 :: v_dual_bitop2_b32 v26, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v28, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v67 :: v_dual_add_nc_u32 v49, 3, v49
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v48, 3, v48 :: v_dual_add_nc_u32 v39, 3, v39
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v30, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v28
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v37, 3, v37 :: v_dual_add_nc_u32 v34, 3, v34
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v27, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v30
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 3, v52
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v28, 16, v28
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v29, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v38, v49, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v30, 16, v30
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v31, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v48, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v39, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v33, v37, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v34, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v32, 16, v32
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v27, v28
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v28, v29, v30
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v31, v34
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v30, v36, v35
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v33, v32
+; GFX13-FAKE16-NEXT: .LBB75_5: ; %end
+; GFX13-FAKE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -125447,6 +147575,46 @@ define <64 x bfloat> @bitcast_v16f64_to_v64bf16(<16 x double> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v64bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_f64_e32 v[30:31], 1.0, v[30:31]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: .LBB76_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -126409,6 +148577,106 @@ define inreg <64 x bfloat> @bitcast_v16f64_to_v64bf16_scalar(<16 x double> inreg
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v64bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB77_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[30:31], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB77_5
+; GFX13-NEXT: .LBB77_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB77_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -129355,6 +151623,62 @@ define <16 x double> @bitcast_v64bf16_to_v16f64(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v16f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB78_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB78_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -133135,6 +155459,150 @@ define inreg <16 x double> @bitcast_v64bf16_to_v16f64_scalar(<64 x bfloat> inreg
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v16f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB79_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB79_5
+; GFX13-NEXT: .LBB79_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB79_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -133535,6 +156003,46 @@ define <64 x half> @bitcast_v16f64_to_v64f16(<16 x double> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v64f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB80_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_f64_e32 v[30:31], 1.0, v[30:31]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: .LBB80_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -134283,6 +156791,106 @@ define inreg <64 x half> @bitcast_v16f64_to_v64f16_scalar(<16 x double> inreg %a
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v64f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB81_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[30:31], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB81_5
+; GFX13-NEXT: .LBB81_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB81_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -135242,6 +157850,62 @@ define <16 x double> @bitcast_v64f16_to_v16f64(<64 x half> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v16f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB82_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB82_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -136388,6 +159052,150 @@ define inreg <16 x double> @bitcast_v64f16_to_v16f64_scalar(<64 x half> inreg %a
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v16f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB83_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, s67 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s66 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s65 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s64 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s63 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s61 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s60 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s58 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s55 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s54 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s53 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s52 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB83_5
+; GFX13-NEXT: .LBB83_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB83_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -136788,6 +159596,46 @@ define <64 x i16> @bitcast_v16f64_to_v64i16(<16 x double> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v64i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB84_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_add_f64_e32 v[30:31], 1.0, v[30:31]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: .LBB84_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -137536,6 +160384,106 @@ define inreg <64 x i16> @bitcast_v16f64_to_v64i16_scalar(<16 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f64_to_v64i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB85_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB85_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB85_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[30:31], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB85_5
+; GFX13-NEXT: .LBB85_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB85_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -138325,6 +161273,62 @@ define <16 x double> @bitcast_v64i16_to_v16f64(<64 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v16f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB86_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -139328,6 +162332,150 @@ define inreg <16 x double> @bitcast_v64i16_to_v16f64_scalar(<64 x i16> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v16f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: v_writelane_b32 v32, s66, 14
+; GFX13-NEXT: v_writelane_b32 v32, s67, 15
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s67, v13
+; GFX13-NEXT: v_readfirstlane_b32 s66, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB87_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB87_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB87_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, s51, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s50, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s49, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s48, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s47, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s46, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s45, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s44, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s43, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s42, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s39, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s38, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s37, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s36, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v31, s67, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s66, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s65, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s64, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s63, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s62, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s61, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s60, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s59, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s58, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s56, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s55, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s54, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s53, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s52, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_branch .LBB87_5
+; GFX13-NEXT: .LBB87_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB87_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s67, v32, 15
+; GFX13-NEXT: v_readlane_b32 s66, v32, 14
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -145643,6 +168791,1554 @@ define <64 x bfloat> @bitcast_v128i8_to_v64bf16(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v64bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v70, off, s32 offset:360
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v35, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v69, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v36, off, s32 offset:324
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v67, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v34, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v33, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v32, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v64, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:196
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v55, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:16
+; GFX13-TRUE16-NEXT: s_clause 0x1a
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v53, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v54, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v66, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v71, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v50, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v51, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v78, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v79, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:68
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v48, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v76, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v77, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v49, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v74, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v75, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v38, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v39, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v43.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v72.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v47.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v59.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v162.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v164.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v62.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v63.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v176.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v179.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v182.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v42.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v41.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v46.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v58.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v61.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v163.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v166.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v178.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v181.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v177.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v180.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v40.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v45.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v57.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v60.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v44.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v56.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v165.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v167.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3e
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v69.l, 8, v69.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v70.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v69.h, 8, v69.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v67.h, 8, v67.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v68.h, 8, v68.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v68.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v67.l, 8, v67.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v65.l, 8, v65.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v64.h, 8, v64.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x21
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v55.h, 8, v55.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1d
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v88
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1c
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v52.h, 8, v52.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1b
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v53.l, 8, v53.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1a
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v52.l, 8, v53.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x19
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v54.l, 8, v54.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x18
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v54.h, 8, v54.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x17
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v53.h, 8, v55.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x16
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v65.h, 8, v64.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x15
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v55.l, 8, v66.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x14
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v64.l, 8, v66.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x13
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v66.l, 8, v71.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x12
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v66.h, 8, v71.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v71.l, 8, v70.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v71.h, 8, v31.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v70.h, 8, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB88_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v118, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v101, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v45, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v116, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v56, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v61, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v83, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v134, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v181, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v17.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v100, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v119, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v42, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v43, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v87, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v114, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v60, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v59, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v19.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v82, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v144, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v167, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v166, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v180, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v179, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v21.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v86, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v46, v41, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v113, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v23.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v151, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v8.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v39.h, v52.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v38.h, v53.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v39.l, v52.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v49.h, v54.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v48.l, v54.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v48.h, v53.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v51.l, v65.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v49.l, v55.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v50.l, v64.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v51.h, v66.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v50.h, v66.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v32.l, v55.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v33.l, v64.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v32.h, v65.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v33.h, v67.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v35.l, v68.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v34.h, v68.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v34.l, v67.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v36.h, v69.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v36.l, v70.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v35.h, v69.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v38.l, v71.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v37.h, v71.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v37.l, v70.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_hi16
+; GFX13-TRUE16-NEXT: .LBB88_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB88_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v37.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v150.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v70.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v71.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v71.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v149.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v35.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v36.h, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v69.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v69.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v70.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v34.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v34.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.h, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v67.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v68.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v68.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v67.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v32.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v131.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v144.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v113.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v64.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v65.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v114.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v103.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v86.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v117.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v133.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v134.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v82.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v116.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v112.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v85.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v100.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v99.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v81.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v118.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v115.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v32.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v55.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x10
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v51.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v50.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xd
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v50.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v51.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v66.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v66.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v64.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v65.h, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v49.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v48.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v49.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v48.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v55.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v53.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v54.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v54.h, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v39.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v39.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v38.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v73.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v72.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v52.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v52.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v53.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v43.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v183.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v164.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v47.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v46.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v41.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v42.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v166.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v163.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v180.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v177.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v60.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v57.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v32.h, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v33.l, 8, v165.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v56.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v32.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v32.l, v33.l, v32.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v32.h, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v32.h
+; GFX13-TRUE16-NEXT: .LBB88_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:392 nv ; 4-byte Folded Reload
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xe
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v64bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v83, v24 :: v_dual_mov_b32 v68, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v69, v22 :: v_dual_mov_b32 v70, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, v18 :: v_dual_mov_b32 v66, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v67, v16 :: v_dual_mov_b32 v50, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v14 :: v_dual_mov_b32 v64, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v65, v12 :: v_dual_mov_b32 v32, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v10 :: v_dual_mov_b32 v53, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v8 :: v_dual_mov_b32 v33, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v6 :: v_dual_mov_b32 v39, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v4 :: v_dual_mov_b32 v34, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v2 :: v_dual_mov_b32 v36, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v37, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v0, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v1, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v2, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v3, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v4, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v5, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v6, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v7, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v8, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v9, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v10, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v11, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v12, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_b32 v13, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v14, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v15, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v16, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v17, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v18, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v19, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v20, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v21, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v22, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v23, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v24, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:12
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v30 :: v_dual_mov_b32 v85, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v86, v28 :: v_dual_mov_b32 v71, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v81, v26 :: v_dual_mov_b32 v82, v25
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3e
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v127, 8, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v126, 8, v1
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v125, 8, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v124, 8, v3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v123, 8, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v122, 8, v5
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v121, 8, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v120, 8, v7
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v111, 8, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v110, 8, v9
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v108, 8, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v109, 8, v11
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v107, 8, v12
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1d
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1c
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v72, 8, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1b
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v73, 8, v15
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1a
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v75, 8, v16
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x19
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v91, 8, v17
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x18
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v92, 8, v18
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x17
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v93, 8, v19
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x16
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v95, 8, v20
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x15
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v94, 8, v21
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x14
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v104, 8, v22
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v106, 8, v23
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x12
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v105, 8, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB88_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v35, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v38, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v65, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v67, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v55, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v80, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v83, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v81, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v7, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v9, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v11, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v84, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v113, v72, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v102, v73, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v133, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v103, v75, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v145, v91, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v134, v92, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v150, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v135, v93, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v14, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v165, v95, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v148, v94, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v164, v104, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v181, v106, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v177, v105, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v119, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v112, v107, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v100, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v97, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v13, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v15, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v17, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v19, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v116, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v101, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v130, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v117, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v146, v144, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v131, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v162, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v151, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v163, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v40, v182, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v179, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v41, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v45, v109, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v42, v108, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v58, v56, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v46, v110, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v59, v111, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v47, v120, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v23, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v29, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v30, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v63, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v57, v121, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v74, v122, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v60, v123, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v77, v76, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v62, v124, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v88, v125, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v78, v126, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v79, v127, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v32, v31, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v33, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v36, v35, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: .LBB88_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB88_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v89
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v79, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v88, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v78, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v76
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v127, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v125, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v126, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v77, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v76, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v77, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v62, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v74, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v60, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v63, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v61
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v124, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v122, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v123, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v57, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v57, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v60, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v121, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v59, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v47, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v56
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v46, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v111, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v120, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v110, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v45, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v45, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v47, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v109, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v42, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v43
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v41, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v183
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v182
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v108, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v179, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v167, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v179, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v166
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v163, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v160
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v151, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v149
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v149, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v146, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v144
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v144, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v146, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v131, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v129
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v128
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v117, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v115
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v114
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v101, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v99
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v99, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v101, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v98
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v97, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v119, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v112, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v87, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v107, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v181, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v97, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v98, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v106, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v177, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0xd
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v176
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v164, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v165, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v105, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v104, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v95, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v148, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v100, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v112, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v94, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v147
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v135, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v145, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v134, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v114, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v93, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v91, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v92, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v133, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v115, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v116, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v103, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v113, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v102, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v75, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v72, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v73, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v84, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v96
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v84, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v85, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v83, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v82
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v81, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v69, v69, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v68, 8, v68
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v70, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v67, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v66
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v68, v69, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v66, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v67, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v65, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v68, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v55, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v51, 8, v51
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v50, 8, v50
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v51, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v50, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v48, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v48, v49, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v38, v38, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v37, v37, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v34
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v39, v39, v48, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v36, v37, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v34, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v33, v38, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v32, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v37, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v34, v35, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v33, v32, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v37, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v68, v67, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v70, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v85, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v84, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v116, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v115, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v114, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v112, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v100, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v98, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v97, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v87, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v101, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v99, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v146, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v149, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v179, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v167, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v47, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v45, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v46, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v60, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v57, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v77, v30, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v76, v31, 0x5040100
+; GFX13-FAKE16-NEXT: .LBB88_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -150157,6 +174853,1126 @@ define inreg <64 x bfloat> @bitcast_v128i8_to_v64bf16_scalar(<128 x i8> inreg %a
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:320 ; 4-byte Folded Reload
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v64bf16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB89_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, 0xc0c0004 :: v_dual_lshlrev_b32 v13, 8, v86
+; GFX13-TRUE16-NEXT: s_and_b32 s76, s43, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s77, s11, 8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 8, v37
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s2, s3, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s26, s27, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s18, s19, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s9, s4, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s40, s8, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s14, s7, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s12, s6, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s76
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s61, s45, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s15, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s58, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s59, s44, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v68
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s41, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s89, s10, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s73, s42, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s88, s88, s89
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s88 :: v_dual_bitop2_b32 v10, v10, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v14, 0xff, v114
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s74, 0xff
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v15, 8, v70 :: v_dual_bitop2_b32 v12, s88, v13 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v38
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v13, 8, v32 :: v_dual_bitop2_b32 v8, v14, v15 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v14, 0xff, v83
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xff, v50
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 8, v33 :: v_dual_lshlrev_b32 v17, 8, v39
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 8, v64 :: v_dual_bitop2_b32 v10, v10, v13 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v134, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v8.l
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v25, 8, v119 :: v_dual_bitop2_b32 v8, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 8, v82 :: v_dual_bitop2_b32 v14, v14, v17 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v53, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v99, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v66, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v97, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v71, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v103, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v69, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v116, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v84, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v130, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v98, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v145, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v113, v55, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v147, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v118, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v117
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v151, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xff, v131
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v164
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v10, v24
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xff, v149
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v29, 8, v101
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xff, v160
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v8, v25
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v26, v27
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 8, v87
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v144
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v176, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v167
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 8, v128 :: v_dual_bitop2_b32 v10, v10, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 8, v102
+; GFX13-TRUE16-NEXT: s_and_b32 s77, s63, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s76, s57, 8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v26, v8, v27
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 8, v132 :: v_dual_bitop2_b32 v8, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v162
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v177, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v179
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v29, 8, v150 :: v_dual_bitop2_b32 v10, v10, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s56, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s79, s5, 8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v30, v31
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v8, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xff, v166
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 8, v133
+; GFX13-TRUE16-NEXT: s_or_b32 s76, s77, s76
+; GFX13-TRUE16-NEXT: s_or_b32 s77, s78, s79
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s62, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s79, s47, 8
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s46, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s89, s13, 8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v165
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v10, 8, v129
+; GFX13-TRUE16-NEXT: s_or_b32 s78, s78, s79
+; GFX13-TRUE16-NEXT: s_or_b32 s79, s88, s89
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s76, s76, s77
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s77, s78, s79
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v40, 0xff, v182
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v31, 8, v178 :: v_dual_bitop2_b32 v41, v29, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s76 :: v_dual_bitop2_b32 v183, v8, v10 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v181, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v40, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v180, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s77
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v30.h, v183.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v31.h, v41.l
+; GFX13-TRUE16-NEXT: s_branch .LBB89_3
+; GFX13-TRUE16-NEXT: .LBB89_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB89_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB89_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v0, 3, v180 :: v_dual_add_nc_u32 v1, 3, v166
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v182 :: v_dual_add_nc_u32 v3, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v181
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s59, s59, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v133, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v160
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v179 :: v_dual_add_nc_u32 v4, 3, v162
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v129, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v1, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v177
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v102, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v149
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v132, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v167
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v144
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v176
+; GFX13-TRUE16-NEXT: s_add_co_i32 s73, s73, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v101, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v131
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v164
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v87, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v117
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v151 :: v_dual_add_nc_u32 v4, 3, v118
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v82, 0x300, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v147
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v64, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v113
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v85, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v135 :: v_dual_add_nc_u32 v3, 3, v98
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v55, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v145
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v55, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v130
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v52, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v69
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v116 :: v_dual_add_nc_u32 v4, 3, v71
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 0x300, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v103
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v66
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v51, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v97 :: v_dual_add_nc_u32 v4, 3, v99
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v53
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v114
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v50
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v38
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v134
+; GFX13-TRUE16-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v68
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s74, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s47, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v38, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s73, s42, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s56, s5, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v37, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s59, s44, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s43, s11, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s61, s61, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s72, s58, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s41, s10, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s46, s13, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v50, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v53, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s12, s6, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s60, s15, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s61, s45, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s63, s63, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v65, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s28, s29, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v39, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s63, s57, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v48, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s9, s4, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s20, s21, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s14, s7, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, s40, s8, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v67, s26, s27, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v68, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s22, s23, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v69, s2, s3, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v70, s18, s19, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v66, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v71, s16, s17, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v80, s0, s1, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v54, 0x300, v54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v67, 0x300, v67
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v69, 0x300, v69
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v70, 0x300, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v81, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v71
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v80
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v85.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v87.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v101.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v28.h, v132.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v102.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v30.h, v129.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v31.h, v133.l
+; GFX13-TRUE16-NEXT: .LBB89_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v64bf16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:192
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:64
+; GFX13-FAKE16-NEXT: s_clause 0x10
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB89_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s74, 0xff
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xff, v48
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 8, v32
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v67, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s20, s21, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s24, s25, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s28, s29, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s11, s8, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s6, s4, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s7, s5, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v80, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v68, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v69, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v11
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v35
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s26, s27, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s15, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s44, s41, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s12, s9, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v116, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_lshl_b32 s77, s43, 8
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v118, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s14, s10, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, s76, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xff, v38
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 8, v117
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s46, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xff, v53
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v15, 8, v37
+; GFX13-FAKE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v11, 16, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v14, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xff, v50
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v15, 8, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v9, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xff, v49
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v10, 8, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v14, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v82, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v115, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xff, v130
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v14
+; GFX13-FAKE16-NEXT: s_lshl_b32 s77, s47, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v9, 16, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v96, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v98, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v86, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v15, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v71, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s40, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s79, s13, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s88, s61, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v102, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s60, s57, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v19, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v87, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v27, 8, v144
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v29, 8, v135
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s73, s72, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 8, v150
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v112, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, s76, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v132, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s58, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v11, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v113, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-FAKE16-NEXT: s_or_b32 s77, s78, s79
+; GFX13-FAKE16-NEXT: s_lshl_b32 s78, s59, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v11, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v23, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v134
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v119
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s76, s76, s77
+; GFX13-FAKE16-NEXT: s_and_b32 s77, s62, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s79, s45, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s77, s77, s78
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v24, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xff, v131
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 8, v114
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s56, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_or_b32 s78, s78, s79
+; GFX13-FAKE16-NEXT: s_and_b32 s79, s63, 0xff
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v24, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v146, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s77, s77, s78
+; GFX13-FAKE16-NEXT: s_or_b32 s78, s79, s88
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v160
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v147
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v25, 16, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xff, v148
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v26, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xff, v149
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v27, 8, v133
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v26, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v162, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v177
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v164
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v27, 16, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xff, v151
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v28, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xff, v176
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v29, 8, v161
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v28, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v179, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v181
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v29, 16, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xff, v178
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xff, v180
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v31, 8, v166 :: v_dual_bitop2_b32 v30, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v11, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v182, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v40, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, s78, 16, v8
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, s76
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v183, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, s77
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v31, 16, v40
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v30, 16, v183
+; GFX13-FAKE16-NEXT: s_branch .LBB89_3
+; GFX13-FAKE16-NEXT: .LBB89_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB89_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB89_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v0, 3, v182 :: v_dual_add_nc_u32 v1, 3, v180
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v181 :: v_dual_add_nc_u32 v3, 3, v178
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v4, 3, v179 :: v_dual_add_nc_u32 v5, 3, v176
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v177
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v4, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v5, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v151
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v164, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v150, 0x300, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v149 :: v_dual_add_nc_u32 v4, 3, v148
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v151, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v162
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v160
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v133, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v144, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v144, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 3, v134
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v135, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v131
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s73, s73, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v130
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v115
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v115, 0x300, v0
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v0, 3, v118 :: v_dual_add_nc_u32 v2, 3, v113
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v112
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v114, 0x300, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v116
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v97, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v99, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v100, 0x300, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v98 :: v_dual_add_nc_u32 v4, 3, v96
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v87
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s63, s63, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v86
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v71, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v82
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 3, v69
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v68
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v70, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v80
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v52, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v54, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v65
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v55, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v50 :: v_dual_add_nc_u32 v2, 3, v53
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v67
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v49
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v48
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v2
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s74, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s73, s72, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s62, s59, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s63, s61, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s40, s13, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v39, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s12, s9, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s56, s45, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s60, s57, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s46, s43, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s58, s47, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s11, s8, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v50, s24, s25, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, s0, s1, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v37, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v38, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s44, s41, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s14, s10, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s42, s15, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v51, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v50, 0x300, v50
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s26, s27, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v67, s2, s3, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v65, 0x300, v65
+; GFX13-FAKE16-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v48, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v49, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s7, s5, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, s16, s17, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v67, 0x300, v67
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v65
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v69, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v38
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s6, s4, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v53, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s20, s21, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v66, s18, s19, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v64, 0x300, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v67, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v69, 16, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v39, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v37, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v35, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v32, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v34, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v71
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v17
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s22, s23, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v66, 0x300, v66
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v68, 0x300, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v55, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v52, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v20, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v21, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v99
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v115
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v66, 16, v64
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v68
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v53, 16, v51
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v100, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v97, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v25, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v26, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v135
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v151
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v6, 16, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v49, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v10, 16, v50
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v11, 16, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v15, 16, v37
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v16, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v70, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v114, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v144, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v133, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v150, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v30, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v31, 16, v35
+; GFX13-FAKE16-NEXT: .LBB89_5: ; %end
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:320 nv ; 4-byte Folded Reload
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -157256,6 +183072,892 @@ define <128 x i8> @bitcast_v64bf16_to_v128i8(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:100
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v64bf16_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x18
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:96 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:92 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB90_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[1:2]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 24, v16 :: v_dual_lshrrev_b32 v71, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v16 :: v_dual_lshrrev_b32 v81, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 8, v15 :: v_dual_lshrrev_b32 v83, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v14 :: v_dual_lshrrev_b32 v85, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 16, v13 :: v_dual_lshrrev_b32 v87, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 24, v12 :: v_dual_lshrrev_b32 v97, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v12 :: v_dual_lshrrev_b32 v99, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v101, 8, v11 :: v_dual_lshrrev_b32 v103, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v113, 16, v10 :: v_dual_lshrrev_b32 v115, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v117, 16, v9 :: v_dual_lshrrev_b32 v119, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v131, 24, v8 :: v_dual_lshrrev_b32 v132, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v8 :: v_dual_lshrrev_b32 v135, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 8, v7 :: v_dual_lshrrev_b32 v148, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v149, 16, v6 :: v_dual_lshrrev_b32 v151, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v161, 16, v5 :: v_dual_lshrrev_b32 v163, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v4 :: v_dual_lshrrev_b32 v176, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v4 :: v_dual_lshrrev_b32 v179, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 8, v3 :: v_dual_lshrrev_b32 v40, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v41, 16, v2 :: v_dual_lshrrev_b32 v43, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v45, 16, v1 :: v_dual_lshrrev_b32 v46, 8, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 24, v32 :: v_dual_lshrrev_b32 v102, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 8, v32 :: v_dual_lshrrev_b32 v114, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v31 :: v_dual_lshrrev_b32 v118, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v30 :: v_dual_lshrrev_b32 v129, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 16, v29 :: v_dual_lshrrev_b32 v133, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 24, v28 :: v_dual_lshrrev_b32 v145, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v147, 8, v28 :: v_dual_lshrrev_b32 v150, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v27 :: v_dual_lshrrev_b32 v162, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v26 :: v_dual_lshrrev_b32 v165, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v167, 16, v25 :: v_dual_lshrrev_b32 v177, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 24, v24 :: v_dual_lshrrev_b32 v181, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v183, 8, v24 :: v_dual_lshrrev_b32 v42, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v23 :: v_dual_lshrrev_b32 v47, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v22 :: v_dual_lshrrev_b32 v57, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 16, v21 :: v_dual_lshrrev_b32 v59, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 24, v20 :: v_dual_lshrrev_b32 v61, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v20 :: v_dual_lshrrev_b32 v63, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 8, v19 :: v_dual_lshrrev_b32 v73, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v18 :: v_dual_lshrrev_b32 v75, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v76, 16, v17 :: v_dual_lshrrev_b32 v77, 8, v17
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[68:69], 24, v[17:18]
+; GFX13-TRUE16-NEXT: .LBB90_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB90_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v32, 0x40c0, v32 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[68:69], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 24, v16 :: v_dual_lshrrev_b32 v71, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v16 :: v_dual_lshrrev_b32 v81, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 8, v15 :: v_dual_lshrrev_b32 v83, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v14 :: v_dual_lshrrev_b32 v85, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 16, v13 :: v_dual_lshrrev_b32 v87, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 24, v12 :: v_dual_lshrrev_b32 v97, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v12 :: v_dual_lshrrev_b32 v99, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v101, 8, v11 :: v_dual_lshrrev_b32 v103, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v113, 16, v10 :: v_dual_lshrrev_b32 v115, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v117, 16, v9 :: v_dual_lshrrev_b32 v119, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v131, 24, v8 :: v_dual_lshrrev_b32 v132, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v8 :: v_dual_lshrrev_b32 v135, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 8, v7 :: v_dual_lshrrev_b32 v148, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v149, 16, v6 :: v_dual_lshrrev_b32 v151, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v161, 16, v5 :: v_dual_lshrrev_b32 v163, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v4 :: v_dual_lshrrev_b32 v176, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v4 :: v_dual_lshrrev_b32 v179, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 8, v3 :: v_dual_lshrrev_b32 v40, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v41, 16, v2 :: v_dual_lshrrev_b32 v43, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v45, 16, v1 :: v_dual_lshrrev_b32 v46, 8, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 24, v32 :: v_dual_lshrrev_b32 v102, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 8, v32 :: v_dual_lshrrev_b32 v114, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v31 :: v_dual_lshrrev_b32 v118, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v30 :: v_dual_lshrrev_b32 v129, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 16, v29 :: v_dual_lshrrev_b32 v133, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 24, v28 :: v_dual_lshrrev_b32 v145, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v147, 8, v28 :: v_dual_lshrrev_b32 v150, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v27 :: v_dual_lshrrev_b32 v162, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v26 :: v_dual_lshrrev_b32 v165, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v167, 16, v25 :: v_dual_lshrrev_b32 v177, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 24, v24 :: v_dual_lshrrev_b32 v181, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v183, 8, v24 :: v_dual_lshrrev_b32 v42, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v23 :: v_dual_lshrrev_b32 v47, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v22 :: v_dual_lshrrev_b32 v57, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 16, v21 :: v_dual_lshrrev_b32 v59, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 24, v20 :: v_dual_lshrrev_b32 v61, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v20 :: v_dual_lshrrev_b32 v63, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 8, v19 :: v_dual_lshrrev_b32 v73, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v18 :: v_dual_lshrrev_b32 v75, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v76, 16, v17 :: v_dual_lshrrev_b32 v77, 8, v17
+; GFX13-TRUE16-NEXT: .LBB90_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v45, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v43, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v179, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v35, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v39, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v176, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v50, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v161, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v135, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v132, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v35, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v39, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v50, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v117, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v113, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v99, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v51, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v55, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v64, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v35, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v39, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v50, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v51, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v86, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v84, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v81, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v77, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v76, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v74, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v63, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v59, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v58, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v42, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v167, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v164, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v150, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v130, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v128, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v114, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v102, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x15 ; 88-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:92 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:96 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v64bf16_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x17
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:92 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB90_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 24, v16 :: v_dual_lshrrev_b32 v70, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 8, v16 :: v_dual_lshrrev_b32 v80, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 8, v15 :: v_dual_lshrrev_b32 v82, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v14 :: v_dual_lshrrev_b32 v84, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v85, 16, v13 :: v_dual_lshrrev_b32 v86, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v87, 24, v12 :: v_dual_lshrrev_b32 v96, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v97, 8, v12 :: v_dual_lshrrev_b32 v98, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v99, 8, v11 :: v_dual_lshrrev_b32 v100, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v101, 16, v10 :: v_dual_lshrrev_b32 v102, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v103, 16, v9 :: v_dual_lshrrev_b32 v112, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v113, 24, v8 :: v_dual_lshrrev_b32 v114, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v115, 8, v8 :: v_dual_lshrrev_b32 v116, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v117, 8, v7 :: v_dual_lshrrev_b32 v118, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v119, 16, v6 :: v_dual_lshrrev_b32 v128, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v129, 16, v5 :: v_dual_lshrrev_b32 v130, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v131, 24, v4 :: v_dual_lshrrev_b32 v132, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v133, 8, v4 :: v_dual_lshrrev_b32 v134, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v145, 8, v3 :: v_dual_lshrrev_b32 v147, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v149, 16, v2 :: v_dual_lshrrev_b32 v151, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v161, 16, v1 :: v_dual_lshrrev_b32 v162, 8, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v135, 24, v32 :: v_dual_lshrrev_b32 v144, 16, v32
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 8, v32 :: v_dual_lshrrev_b32 v148, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v31 :: v_dual_lshrrev_b32 v160, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v163, 16, v30 :: v_dual_lshrrev_b32 v164, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v165, 16, v29 :: v_dual_lshrrev_b32 v166, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v167, 24, v28 :: v_dual_lshrrev_b32 v176, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v177, 8, v28 :: v_dual_lshrrev_b32 v178, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v179, 8, v27 :: v_dual_lshrrev_b32 v180, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v181, 16, v26 :: v_dual_lshrrev_b32 v182, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v183, 16, v25 :: v_dual_lshrrev_b32 v40, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v41, 24, v24 :: v_dual_lshrrev_b32 v42, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v43, 8, v24 :: v_dual_lshrrev_b32 v44, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v45, 8, v23 :: v_dual_lshrrev_b32 v46, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v47, 16, v22 :: v_dual_lshrrev_b32 v56, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v57, 16, v21 :: v_dual_lshrrev_b32 v58, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v59, 24, v20 :: v_dual_lshrrev_b32 v60, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v61, 8, v20 :: v_dual_lshrrev_b32 v62, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v63, 8, v19 :: v_dual_lshrrev_b32 v72, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v73, 16, v18 :: v_dual_lshrrev_b32 v74, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v75, 16, v17 :: v_dual_lshrrev_b32 v76, 8, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[17:18]
+; GFX13-FAKE16-NEXT: .LBB90_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB90_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v32, 0x40c0, v32 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 24, v16 :: v_dual_lshrrev_b32 v70, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 8, v16 :: v_dual_lshrrev_b32 v80, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 8, v15 :: v_dual_lshrrev_b32 v82, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v14 :: v_dual_lshrrev_b32 v84, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v85, 16, v13 :: v_dual_lshrrev_b32 v86, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v87, 24, v12 :: v_dual_lshrrev_b32 v96, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v97, 8, v12 :: v_dual_lshrrev_b32 v98, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v99, 8, v11 :: v_dual_lshrrev_b32 v100, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v101, 16, v10 :: v_dual_lshrrev_b32 v102, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v103, 16, v9 :: v_dual_lshrrev_b32 v112, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v113, 24, v8 :: v_dual_lshrrev_b32 v114, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v115, 8, v8 :: v_dual_lshrrev_b32 v116, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v117, 8, v7 :: v_dual_lshrrev_b32 v118, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v119, 16, v6 :: v_dual_lshrrev_b32 v128, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v129, 16, v5 :: v_dual_lshrrev_b32 v130, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v131, 24, v4 :: v_dual_lshrrev_b32 v132, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v133, 8, v4 :: v_dual_lshrrev_b32 v134, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v145, 8, v3 :: v_dual_lshrrev_b32 v147, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v149, 16, v2 :: v_dual_lshrrev_b32 v151, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v161, 16, v1 :: v_dual_lshrrev_b32 v162, 8, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v135, 24, v32 :: v_dual_lshrrev_b32 v144, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 8, v32 :: v_dual_lshrrev_b32 v148, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v31 :: v_dual_lshrrev_b32 v160, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v163, 16, v30 :: v_dual_lshrrev_b32 v164, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v165, 16, v29 :: v_dual_lshrrev_b32 v166, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v167, 24, v28 :: v_dual_lshrrev_b32 v176, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v177, 8, v28 :: v_dual_lshrrev_b32 v178, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v179, 8, v27 :: v_dual_lshrrev_b32 v180, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v181, 16, v26 :: v_dual_lshrrev_b32 v182, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v183, 16, v25 :: v_dual_lshrrev_b32 v40, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v41, 24, v24 :: v_dual_lshrrev_b32 v42, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v43, 8, v24 :: v_dual_lshrrev_b32 v44, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v45, 8, v23 :: v_dual_lshrrev_b32 v46, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v47, 16, v22 :: v_dual_lshrrev_b32 v56, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v57, 16, v21 :: v_dual_lshrrev_b32 v58, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v59, 24, v20 :: v_dual_lshrrev_b32 v60, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v61, 8, v20 :: v_dual_lshrrev_b32 v62, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v63, 8, v19 :: v_dual_lshrrev_b32 v72, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v73, 16, v18 :: v_dual_lshrrev_b32 v74, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v75, 16, v17 :: v_dual_lshrrev_b32 v76, 8, v17
+; GFX13-FAKE16-NEXT: .LBB90_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v161, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v51, v149, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v134, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v37, v116, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v51, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v48, v129, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v51, v119, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v37, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v103, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v37, v101, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v98, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v48, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v51, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v52, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v36, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v37, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v35, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v85, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v83, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v80, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v76, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v75, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v74, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v73, v72, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v62, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v57, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v56, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v47, v46, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v44, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v183, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v182, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v181, v180, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v178, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v165, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v164, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v163, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v148, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x14 ; 84-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:92 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -165743,6 +192445,849 @@ define inreg <128 x i8> @bitcast_v64bf16_to_v128i8_scalar(<64 x bfloat> inreg %a
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_or_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v74, s32 offset:72 nv
+; GFX13-NEXT: scratch_store_b32 off, v75, s32 offset:76 nv
+; GFX13-NEXT: scratch_store_b32 off, v76, s32 offset:80 nv
+; GFX13-NEXT: scratch_store_b32 off, v77, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v40, s32 offset:68 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v41, s32 offset:64 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v42, s32 offset:60 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v43, s32 offset:56 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v44, s32 offset:52 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v45, s32 offset:48 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v46, s32 offset:44 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v47, s32 offset:40 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v56, s32 offset:36 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v57, s32 offset:32 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v58, s32 offset:28 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v59, s32 offset:24 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v60, s32 offset:20 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v61, s32 offset:16 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v62, s32 offset:12 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v63, s32 offset:8 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v72, s32 offset:4 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v73, s32 nv
+; GFX13-NEXT: v_writelane_b32 v74, s34, 0
+; GFX13-NEXT: v_writelane_b32 v74, s35, 1
+; GFX13-NEXT: v_writelane_b32 v74, s36, 2
+; GFX13-NEXT: v_writelane_b32 v74, s37, 3
+; GFX13-NEXT: v_writelane_b32 v74, s38, 4
+; GFX13-NEXT: v_writelane_b32 v74, s39, 5
+; GFX13-NEXT: v_writelane_b32 v74, s48, 6
+; GFX13-NEXT: v_writelane_b32 v74, s49, 7
+; GFX13-NEXT: v_writelane_b32 v74, s50, 8
+; GFX13-NEXT: v_writelane_b32 v74, s51, 9
+; GFX13-NEXT: v_writelane_b32 v74, s52, 10
+; GFX13-NEXT: v_writelane_b32 v74, s53, 11
+; GFX13-NEXT: v_writelane_b32 v74, s54, 12
+; GFX13-NEXT: v_writelane_b32 v74, s55, 13
+; GFX13-NEXT: v_writelane_b32 v74, s64, 14
+; GFX13-NEXT: v_writelane_b32 v74, s65, 15
+; GFX13-NEXT: v_writelane_b32 v74, s66, 16
+; GFX13-NEXT: v_writelane_b32 v74, s67, 17
+; GFX13-NEXT: v_writelane_b32 v74, s68, 18
+; GFX13-NEXT: v_writelane_b32 v74, s69, 19
+; GFX13-NEXT: v_writelane_b32 v74, s70, 20
+; GFX13-NEXT: v_writelane_b32 v74, s71, 21
+; GFX13-NEXT: v_writelane_b32 v74, s80, 22
+; GFX13-NEXT: v_writelane_b32 v74, s81, 23
+; GFX13-NEXT: v_writelane_b32 v74, s82, 24
+; GFX13-NEXT: v_writelane_b32 v74, s83, 25
+; GFX13-NEXT: v_writelane_b32 v74, s84, 26
+; GFX13-NEXT: v_writelane_b32 v74, s85, 27
+; GFX13-NEXT: v_writelane_b32 v74, s86, 28
+; GFX13-NEXT: v_writelane_b32 v74, s87, 29
+; GFX13-NEXT: v_writelane_b32 v74, s96, 30
+; GFX13-NEXT: v_writelane_b32 v74, s97, 31
+; GFX13-NEXT: v_writelane_b32 v75, s98, 0
+; GFX13-NEXT: v_writelane_b32 v75, s99, 1
+; GFX13-NEXT: v_writelane_b32 v75, s100, 2
+; GFX13-NEXT: v_writelane_b32 v75, s101, 3
+; GFX13-NEXT: v_writelane_b32 v75, s102, 4
+; GFX13-NEXT: v_writelane_b32 v75, s103, 5
+; GFX13-NEXT: v_writelane_b32 v75, s104, 6
+; GFX13-NEXT: v_writelane_b32 v75, s30, 7
+; GFX13-NEXT: v_writelane_b32 v75, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s5, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s7, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s9, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s13, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s15, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s100, 0
+; GFX13-NEXT: ; implicit-def: $vgpr76 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr77 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB91_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s42, s27, 24
+; GFX13-NEXT: s_lshr_b32 s30, s5, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s31, s5, 16
+; GFX13-NEXT: s_lshr_b32 s35, s5, 8
+; GFX13-NEXT: s_lshr_b32 s34, s4, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s27, 8
+; GFX13-NEXT: s_lshr_b32 s36, s4, 8
+; GFX13-NEXT: s_lshr_b32 s37, s7, 24
+; GFX13-NEXT: s_lshr_b32 s38, s7, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-NEXT: s_lshr_b32 s48, s7, 8
+; GFX13-NEXT: s_lshr_b32 s39, s6, 16
+; GFX13-NEXT: s_lshr_b32 s49, s6, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s26, 8
+; GFX13-NEXT: s_lshr_b32 s50, s9, 24
+; GFX13-NEXT: s_lshr_b32 s51, s9, 16
+; GFX13-NEXT: s_lshr_b32 s53, s9, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s25, 24
+; GFX13-NEXT: s_lshr_b32 s52, s8, 16
+; GFX13-NEXT: s_lshr_b32 s54, s8, 8
+; GFX13-NEXT: s_lshr_b32 s55, s11, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s25, 16
+; GFX13-NEXT: s_lshr_b32 s64, s11, 16
+; GFX13-NEXT: s_lshr_b32 s66, s11, 8
+; GFX13-NEXT: s_lshr_b32 s65, s10, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s25, 8
+; GFX13-NEXT: s_lshr_b32 s67, s10, 8
+; GFX13-NEXT: s_lshr_b32 s68, s13, 24
+; GFX13-NEXT: s_lshr_b32 s69, s13, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 0
+; GFX13-NEXT: s_lshr_b32 s42, s24, 16
+; GFX13-NEXT: s_lshr_b32 s71, s13, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 31
+; GFX13-NEXT: s_lshr_b32 s42, s24, 8
+; GFX13-NEXT: s_lshr_b32 s70, s12, 16
+; GFX13-NEXT: s_lshr_b32 s80, s12, 8
+; GFX13-NEXT: s_lshr_b32 s81, s15, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 30
+; GFX13-NEXT: s_lshr_b32 s42, s23, 24
+; GFX13-NEXT: s_lshr_b32 s82, s15, 16
+; GFX13-NEXT: s_lshr_b32 s84, s15, 8
+; GFX13-NEXT: s_lshr_b32 s83, s14, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 29
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s85, s14, 8
+; GFX13-NEXT: s_lshr_b32 s86, s41, 24
+; GFX13-NEXT: s_lshr_b32 s87, s41, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 28
+; GFX13-NEXT: s_lshr_b32 s42, s23, 8
+; GFX13-NEXT: s_lshr_b32 s97, s41, 8
+; GFX13-NEXT: s_lshr_b32 s96, s40, 16
+; GFX13-NEXT: s_lshr_b32 s98, s40, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 27
+; GFX13-NEXT: s_lshr_b32 s42, s22, 16
+; GFX13-NEXT: s_lshr_b32 s99, s29, 24
+; GFX13-NEXT: s_lshr_b32 s101, s29, 16
+; GFX13-NEXT: s_lshr_b32 s103, s29, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 26
+; GFX13-NEXT: s_lshr_b32 s42, s22, 8
+; GFX13-NEXT: s_lshr_b32 s102, s28, 16
+; GFX13-NEXT: s_lshr_b32 s104, s28, 8
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 25
+; GFX13-NEXT: s_lshr_b32 s42, s21, 24
+; GFX13-NEXT: s_lshr_b64 s[62:63], s[24:25], 24
+; GFX13-NEXT: s_lshr_b64 s[60:61], s[22:23], 24
+; GFX13-NEXT: s_lshr_b64 s[58:59], s[20:21], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 24
+; GFX13-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-NEXT: s_lshr_b64 s[56:57], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[46:47], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[44:45], s[2:3], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 23
+; GFX13-NEXT: s_lshr_b32 s42, s21, 8
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[4:5], 24
+; GFX13-NEXT: s_lshr_b64 s[76:77], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[78:79], s[8:9], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 22
+; GFX13-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[10:11], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[12:13], 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[14:15], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 21
+; GFX13-NEXT: s_lshr_b32 s42, s20, 8
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[28:29], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 20
+; GFX13-NEXT: s_lshr_b32 s42, s19, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 19
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 18
+; GFX13-NEXT: s_lshr_b32 s42, s19, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 17
+; GFX13-NEXT: s_lshr_b32 s42, s18, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 16
+; GFX13-NEXT: s_lshr_b32 s42, s18, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 15
+; GFX13-NEXT: s_lshr_b32 s42, s17, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 14
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 13
+; GFX13-NEXT: s_lshr_b32 s42, s17, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 12
+; GFX13-NEXT: s_lshr_b32 s42, s16, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 11
+; GFX13-NEXT: s_lshr_b32 s42, s16, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 10
+; GFX13-NEXT: s_lshr_b32 s42, s3, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 9
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 8
+; GFX13-NEXT: s_lshr_b32 s42, s3, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s2, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s2, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s1, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s0, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s0, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 0
+; GFX13-NEXT: s_lshr_b64 s[42:43], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB91_3
+; GFX13-NEXT: .LBB91_2:
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: s_mov_b32 s100, -1
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr103
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr30
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: .LBB91_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s43, s100, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v34, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v33, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v36, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v35, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_lshrrev_b64 v[51:52], 24, v[17:18]
+; GFX13-NEXT: v_lshrrev_b64 v[64:65], 24, v[27:28]
+; GFX13-NEXT: v_lshrrev_b64 v[52:53], 24, v[19:20]
+; GFX13-NEXT: v_lshrrev_b64 v[65:66], 24, v[29:30]
+; GFX13-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-NEXT: v_lshrrev_b64 v[69:70], 24, v[33:34]
+; GFX13-NEXT: v_lshrrev_b64 v[37:38], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[48:49], 24, v[9:10]
+; GFX13-NEXT: v_lshrrev_b64 v[66:67], 24, v[13:14]
+; GFX13-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-NEXT: v_lshrrev_b64 v[70:71], 24, v[35:36]
+; GFX13-NEXT: v_lshrrev_b64 v[25:26], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[31:32], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[38:39], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[49:50], 24, v[11:12]
+; GFX13-NEXT: v_lshrrev_b64 v[67:68], 24, v[15:16]
+; GFX13-NEXT: v_dual_lshrrev_b32 v148, 24, v18 :: v_dual_lshrrev_b32 v147, 16, v18
+; GFX13-NEXT: v_dual_lshrrev_b32 v146, 8, v18 :: v_dual_lshrrev_b32 v160, 16, v17
+; GFX13-NEXT: v_dual_lshrrev_b32 v150, 8, v17 :: v_dual_lshrrev_b32 v162, 24, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v161, 16, v20 :: v_dual_lshrrev_b32 v149, 8, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v163, 16, v19 :: v_dual_lshrrev_b32 v151, 8, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v166, 24, v22 :: v_dual_lshrrev_b32 v165, 16, v22
+; GFX13-NEXT: v_dual_lshrrev_b32 v164, 8, v22 :: v_dual_lshrrev_b32 v178, 16, v21
+; GFX13-NEXT: v_dual_lshrrev_b32 v176, 8, v21 :: v_dual_lshrrev_b32 v180, 24, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v179, 16, v24 :: v_dual_lshrrev_b32 v167, 8, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v181, 16, v23 :: v_dual_lshrrev_b32 v177, 8, v23
+; GFX13-NEXT: v_dual_lshrrev_b32 v42, 24, v28 :: v_dual_lshrrev_b32 v41, 16, v28
+; GFX13-NEXT: v_dual_lshrrev_b32 v183, 8, v28 :: v_dual_lshrrev_b32 v43, 16, v27
+; GFX13-NEXT: v_dual_lshrrev_b32 v182, 8, v27 :: v_dual_lshrrev_b32 v46, 24, v30
+; GFX13-NEXT: v_dual_lshrrev_b32 v44, 16, v30 :: v_dual_lshrrev_b32 v40, 8, v30
+; GFX13-NEXT: v_dual_lshrrev_b32 v47, 16, v29 :: v_dual_lshrrev_b32 v45, 8, v29
+; GFX13-NEXT: v_dual_lshrrev_b32 v59, 24, v34 :: v_dual_lshrrev_b32 v58, 16, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v57, 8, v34 :: v_dual_lshrrev_b32 v60, 16, v33
+; GFX13-NEXT: v_dual_lshrrev_b32 v56, 8, v33 :: v_dual_lshrrev_b32 v72, 24, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v62, 16, v36 :: v_dual_lshrrev_b32 v61, 8, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v73, 16, v35 :: v_dual_lshrrev_b32 v63, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v50, 24, v2 :: v_dual_lshrrev_b32 v39, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 8, v2 :: v_dual_lshrrev_b32 v71, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v32, 8, v1 :: v_dual_lshrrev_b32 v81, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v80, 16, v4 :: v_dual_lshrrev_b32 v55, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v84, 16, v3 :: v_dual_lshrrev_b32 v82, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v86, 24, v6 :: v_dual_lshrrev_b32 v85, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v83, 8, v6 :: v_dual_lshrrev_b32 v97, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v87, 8, v5 :: v_dual_lshrrev_b32 v100, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v99, 16, v8 :: v_dual_lshrrev_b32 v96, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v101, 16, v7 :: v_dual_lshrrev_b32 v98, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v112, 24, v10 :: v_dual_lshrrev_b32 v103, 16, v10
+; GFX13-NEXT: v_dual_lshrrev_b32 v102, 8, v10 :: v_dual_lshrrev_b32 v115, 16, v9
+; GFX13-NEXT: v_dual_lshrrev_b32 v113, 8, v9 :: v_dual_lshrrev_b32 v118, 24, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v117, 16, v12 :: v_dual_lshrrev_b32 v114, 8, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v119, 16, v11 :: v_dual_lshrrev_b32 v116, 8, v11
+; GFX13-NEXT: v_dual_lshrrev_b32 v130, 24, v14 :: v_dual_lshrrev_b32 v129, 16, v14
+; GFX13-NEXT: v_dual_lshrrev_b32 v128, 8, v14 :: v_dual_lshrrev_b32 v133, 16, v13
+; GFX13-NEXT: v_dual_lshrrev_b32 v131, 8, v13 :: v_dual_lshrrev_b32 v144, 24, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v135, 16, v16 :: v_dual_lshrrev_b32 v132, 8, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v145, 16, v15 :: v_dual_lshrrev_b32 v134, 8, v15
+; GFX13-NEXT: s_branch .LBB91_6
+; GFX13-NEXT: .LBB91_5:
+; GFX13-NEXT: v_dual_mov_b32 v35, s0 :: v_dual_mov_b32 v36, s1
+; GFX13-NEXT: v_readlane_b32 s0, v76, 0
+; GFX13-NEXT: v_dual_mov_b32 v15, s28 :: v_dual_mov_b32 v16, s29
+; GFX13-NEXT: v_dual_mov_b32 v13, s40 :: v_dual_mov_b32 v14, s41
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v63, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 1
+; GFX13-NEXT: v_dual_mov_b32 v11, s14 :: v_dual_mov_b32 v12, s15
+; GFX13-NEXT: v_dual_mov_b32 v9, s12 :: v_dual_mov_b32 v10, s13
+; GFX13-NEXT: v_mov_b32_e32 v73, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 2
+; GFX13-NEXT: v_dual_mov_b32 v7, s10 :: v_dual_mov_b32 v8, s11
+; GFX13-NEXT: v_dual_mov_b32 v5, s8 :: v_dual_mov_b32 v6, s9
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v61, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 3
+; GFX13-NEXT: v_dual_mov_b32 v3, s6 :: v_dual_mov_b32 v4, s7
+; GFX13-NEXT: v_dual_mov_b32 v1, s4 :: v_dual_mov_b32 v2, s5
+; GFX13-NEXT: v_mov_b32_e32 v62, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 4
+; GFX13-NEXT: v_dual_mov_b32 v33, s2 :: v_dual_mov_b32 v34, s3
+; GFX13-NEXT: v_dual_mov_b32 v29, s16 :: v_dual_mov_b32 v30, s17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v72, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 5
+; GFX13-NEXT: v_dual_mov_b32 v27, s18 :: v_dual_mov_b32 v28, s19
+; GFX13-NEXT: v_dual_mov_b32 v23, s20 :: v_dual_mov_b32 v24, s21
+; GFX13-NEXT: v_mov_b32_e32 v56, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 6
+; GFX13-NEXT: v_dual_mov_b32 v21, s22 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v19, s24 :: v_dual_mov_b32 v20, s25
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v60, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 7
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s27
+; GFX13-NEXT: v_dual_mov_b32 v134, s104 :: v_dual_mov_b32 v145, s102
+; GFX13-NEXT: v_mov_b32_e32 v57, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 8
+; GFX13-NEXT: v_dual_mov_b32 v132, s103 :: v_dual_mov_b32 v135, s101
+; GFX13-NEXT: v_dual_mov_b32 v144, s99 :: v_dual_mov_b32 v131, s98
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v58, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 9
+; GFX13-NEXT: v_dual_mov_b32 v133, s96 :: v_dual_mov_b32 v128, s97
+; GFX13-NEXT: v_dual_mov_b32 v129, s87 :: v_dual_mov_b32 v130, s86
+; GFX13-NEXT: v_mov_b32_e32 v59, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 10
+; GFX13-NEXT: v_dual_mov_b32 v116, s85 :: v_dual_mov_b32 v119, s83
+; GFX13-NEXT: v_dual_mov_b32 v114, s84 :: v_dual_mov_b32 v117, s82
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v45, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 11
+; GFX13-NEXT: v_dual_mov_b32 v118, s81 :: v_dual_mov_b32 v113, s80
+; GFX13-NEXT: v_dual_mov_b32 v115, s70 :: v_dual_mov_b32 v102, s71
+; GFX13-NEXT: v_mov_b32_e32 v47, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 12
+; GFX13-NEXT: v_dual_mov_b32 v103, s69 :: v_dual_mov_b32 v112, s68
+; GFX13-NEXT: v_dual_mov_b32 v98, s67 :: v_dual_mov_b32 v101, s65
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v40, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 13
+; GFX13-NEXT: v_dual_mov_b32 v96, s66 :: v_dual_mov_b32 v99, s64
+; GFX13-NEXT: v_dual_mov_b32 v100, s55 :: v_dual_mov_b32 v87, s54
+; GFX13-NEXT: v_mov_b32_e32 v44, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 14
+; GFX13-NEXT: v_dual_mov_b32 v97, s52 :: v_dual_mov_b32 v83, s53
+; GFX13-NEXT: v_dual_mov_b32 v85, s51 :: v_dual_mov_b32 v86, s50
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v46, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 15
+; GFX13-NEXT: v_dual_mov_b32 v82, s49 :: v_dual_mov_b32 v84, s39
+; GFX13-NEXT: v_dual_mov_b32 v55, s48 :: v_dual_mov_b32 v80, s38
+; GFX13-NEXT: v_mov_b32_e32 v182, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 16
+; GFX13-NEXT: v_dual_mov_b32 v81, s37 :: v_dual_mov_b32 v32, s36
+; GFX13-NEXT: v_dual_mov_b32 v71, s34 :: v_dual_mov_b32 v26, s35
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v43, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 17
+; GFX13-NEXT: v_dual_mov_b32 v39, s31 :: v_dual_mov_b32 v50, s30
+; GFX13-NEXT: v_dual_mov_b32 v51, s72 :: v_dual_mov_b32 v52, s62
+; GFX13-NEXT: v_mov_b32_e32 v183, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 18
+; GFX13-NEXT: v_dual_mov_b32 v53, s60 :: v_dual_mov_b32 v54, s58
+; GFX13-NEXT: v_dual_mov_b32 v64, s56 :: v_dual_mov_b32 v65, s46
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v41, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 19
+; GFX13-NEXT: v_dual_mov_b32 v69, s44 :: v_dual_mov_b32 v70, s42
+; GFX13-NEXT: v_dual_mov_b32 v25, s74 :: v_dual_mov_b32 v31, s76
+; GFX13-NEXT: v_mov_b32_e32 v42, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 20
+; GFX13-NEXT: v_dual_mov_b32 v37, s78 :: v_dual_mov_b32 v38, s88
+; GFX13-NEXT: v_dual_mov_b32 v48, s90 :: v_dual_mov_b32 v49, s92
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_mov_b32_e32 v177, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 21
+; GFX13-NEXT: v_dual_mov_b32 v66, s94 :: v_dual_mov_b32 v67, vcc_lo
+; GFX13-NEXT: v_mov_b32_e32 v181, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v167, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 23
+; GFX13-NEXT: v_mov_b32_e32 v179, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v180, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 25
+; GFX13-NEXT: v_mov_b32_e32 v176, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v178, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 27
+; GFX13-NEXT: v_mov_b32_e32 v164, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 28
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v165, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 29
+; GFX13-NEXT: v_mov_b32_e32 v166, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v151, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 31
+; GFX13-NEXT: v_mov_b32_e32 v163, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v149, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 1
+; GFX13-NEXT: v_mov_b32_e32 v161, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v162, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 3
+; GFX13-NEXT: v_mov_b32_e32 v150, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v160, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 5
+; GFX13-NEXT: v_mov_b32_e32 v146, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v147, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 7
+; GFX13-NEXT: v_mov_b32_e32 v148, s0
+; GFX13-NEXT: .LBB91_6: ; %end
+; GFX13-NEXT: v_perm_b32 v68, v73, v70, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v62, v72, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v69, v60, v69, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v35, v35, v63, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v36, v36, v61, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v68, 16, v68 :: v_dual_lshlrev_b32 v70, 16, v70
+; GFX13-NEXT: v_perm_b32 v58, v58, v59, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v56, v33, v56, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v65, v47, v65, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v64, v43, v64, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v57, v34, v57, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v58, 16, v58 :: v_dual_bitop2_b32 v33, v35, v68 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshlrev_b32_e32 v65, 16, v65
+; GFX13-NEXT: v_dual_lshlrev_b32 v64, 16, v64 :: v_dual_bitop2_b32 v35, v56, v69 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v29, v29, v45, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v68, v44, v46, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v34, v36, v70
+; GFX13-NEXT: v_perm_b32 v69, v41, v42, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v27, v182, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v36, v57, v58
+; GFX13-NEXT: v_perm_b32 v30, v30, v40, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v68, 16, v68
+; GFX13-NEXT: v_perm_b32 v182, v28, v183, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v54, v181, v54, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v27, v29, v65
+; GFX13-NEXT: v_or_b32_e32 v29, v70, v64
+; GFX13-NEXT: v_perm_b32 v64, v179, v180, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v53, v178, v53, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v28, v30, v68
+; GFX13-NEXT: v_or_b32_e32 v30, v182, v69
+; GFX13-NEXT: v_perm_b32 v23, v23, v177, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v54, 16, v54
+; GFX13-NEXT: v_perm_b32 v24, v24, v167, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v64, 16, v64
+; GFX13-NEXT: v_perm_b32 v21, v21, v176, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v53, 16, v53
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_store_b128 v0, v[33:36], off
+; GFX13-NEXT: scratch_store_b128 v0, v[27:30], off offset:16
+; GFX13-NEXT: v_perm_b32 v30, v160, v51, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v29, v21, v53
+; GFX13-NEXT: v_perm_b32 v21, v22, v164, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v22, v163, v52, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v28, v24, v64
+; GFX13-NEXT: v_perm_b32 v24, v161, v162, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v27, v23, v54
+; GFX13-NEXT: v_perm_b32 v23, v165, v166, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_perm_b32 v17, v17, v150, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_lshlrev_b32 v33, 16, v30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_bitop2_b32 v19, v19, v22 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v22, v147, v148, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v15, v15, v134, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v16, v16, v132, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v30, v21, v23
+; GFX13-NEXT: v_or_b32_e32 v21, v17, v33
+; GFX13-NEXT: v_perm_b32 v17, v18, v146, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v18, v145, v67, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v20, v20, v24
+; GFX13-NEXT: v_perm_b32 v23, v135, v144, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v133, v66, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v13, v13, v131, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v12, v12, v114, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v9, v113, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v11, v11, v116, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v16, v16, v23
+; GFX13-NEXT: v_perm_b32 v23, v117, v118, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v22, v17, v22
+; GFX13-NEXT: v_or_b32_e32 v17, v13, v24
+; GFX13-NEXT: v_perm_b32 v24, v115, v48, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v15, v15, v18
+; GFX13-NEXT: v_perm_b32 v18, v129, v130, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v14, v128, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v119, v49, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v7, v7, v98, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_bitop2_b32 v12, v12, v23 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v23, v99, v100, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v18, v13, v18
+; GFX13-NEXT: v_or_b32_e32 v13, v9, v24
+; GFX13-NEXT: v_perm_b32 v9, v10, v102, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v101, v38, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v97, v37, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v11, v11, v14
+; GFX13-NEXT: v_perm_b32 v14, v103, v112, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v8, v8, v96, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v5, v5, v87, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v6, v6, v83, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v23
+; GFX13-NEXT: v_perm_b32 v23, v80, v81, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v7, v7, v10
+; GFX13-NEXT: v_perm_b32 v10, v85, v86, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v14, v9, v14
+; GFX13-NEXT: v_or_b32_e32 v9, v5, v24
+; GFX13-NEXT: v_perm_b32 v5, v84, v31, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v71, v25, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v25, v39, v50, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v3, v3, v82, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v4, v4, v55, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v31, v1, v32, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v10, v6, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v26, v2, v26, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v23
+; GFX13-NEXT: v_or_b32_e32 v3, v31, v24
+; GFX13-NEXT: v_readlane_b32 s30, v75, 7
+; GFX13-NEXT: v_or_b32_e32 v4, v26, v25
+; GFX13-NEXT: s_clause 0x5
+; GFX13-NEXT: scratch_store_b128 v0, v[27:30], off offset:32
+; GFX13-NEXT: scratch_store_b128 v0, v[19:22], off offset:48
+; GFX13-NEXT: scratch_store_b128 v0, v[15:18], off offset:64
+; GFX13-NEXT: scratch_store_b128 v0, v[11:14], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[7:10], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off offset:112
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v73, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v72, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v63, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v62, off, s32 offset:12 nv
+; GFX13-NEXT: scratch_load_b32 v61, off, s32 offset:16 nv
+; GFX13-NEXT: scratch_load_b32 v60, off, s32 offset:20 nv
+; GFX13-NEXT: scratch_load_b32 v59, off, s32 offset:24 nv
+; GFX13-NEXT: scratch_load_b32 v58, off, s32 offset:28 nv
+; GFX13-NEXT: scratch_load_b32 v57, off, s32 offset:32 nv
+; GFX13-NEXT: scratch_load_b32 v56, off, s32 offset:36 nv
+; GFX13-NEXT: scratch_load_b32 v47, off, s32 offset:40 nv
+; GFX13-NEXT: scratch_load_b32 v46, off, s32 offset:44 nv
+; GFX13-NEXT: scratch_load_b32 v45, off, s32 offset:48 nv
+; GFX13-NEXT: scratch_load_b32 v44, off, s32 offset:52 nv
+; GFX13-NEXT: scratch_load_b32 v43, off, s32 offset:56 nv
+; GFX13-NEXT: scratch_load_b32 v42, off, s32 offset:60 nv
+; GFX13-NEXT: scratch_load_b32 v41, off, s32 offset:64 nv
+; GFX13-NEXT: scratch_load_b32 v40, off, s32 offset:68 nv
+; GFX13-NEXT: v_readlane_b32 s31, v75, 8
+; GFX13-NEXT: v_readlane_b32 s104, v75, 6
+; GFX13-NEXT: v_readlane_b32 s103, v75, 5
+; GFX13-NEXT: v_readlane_b32 s102, v75, 4
+; GFX13-NEXT: v_readlane_b32 s101, v75, 3
+; GFX13-NEXT: v_readlane_b32 s100, v75, 2
+; GFX13-NEXT: v_readlane_b32 s99, v75, 1
+; GFX13-NEXT: v_readlane_b32 s98, v75, 0
+; GFX13-NEXT: v_readlane_b32 s97, v74, 31
+; GFX13-NEXT: v_readlane_b32 s96, v74, 30
+; GFX13-NEXT: v_readlane_b32 s87, v74, 29
+; GFX13-NEXT: v_readlane_b32 s86, v74, 28
+; GFX13-NEXT: v_readlane_b32 s85, v74, 27
+; GFX13-NEXT: v_readlane_b32 s84, v74, 26
+; GFX13-NEXT: v_readlane_b32 s83, v74, 25
+; GFX13-NEXT: v_readlane_b32 s82, v74, 24
+; GFX13-NEXT: v_readlane_b32 s81, v74, 23
+; GFX13-NEXT: v_readlane_b32 s80, v74, 22
+; GFX13-NEXT: v_readlane_b32 s71, v74, 21
+; GFX13-NEXT: v_readlane_b32 s70, v74, 20
+; GFX13-NEXT: v_readlane_b32 s69, v74, 19
+; GFX13-NEXT: v_readlane_b32 s68, v74, 18
+; GFX13-NEXT: v_readlane_b32 s67, v74, 17
+; GFX13-NEXT: v_readlane_b32 s66, v74, 16
+; GFX13-NEXT: v_readlane_b32 s65, v74, 15
+; GFX13-NEXT: v_readlane_b32 s64, v74, 14
+; GFX13-NEXT: v_readlane_b32 s55, v74, 13
+; GFX13-NEXT: v_readlane_b32 s54, v74, 12
+; GFX13-NEXT: v_readlane_b32 s53, v74, 11
+; GFX13-NEXT: v_readlane_b32 s52, v74, 10
+; GFX13-NEXT: v_readlane_b32 s51, v74, 9
+; GFX13-NEXT: v_readlane_b32 s50, v74, 8
+; GFX13-NEXT: v_readlane_b32 s49, v74, 7
+; GFX13-NEXT: v_readlane_b32 s48, v74, 6
+; GFX13-NEXT: v_readlane_b32 s39, v74, 5
+; GFX13-NEXT: v_readlane_b32 s38, v74, 4
+; GFX13-NEXT: v_readlane_b32 s37, v74, 3
+; GFX13-NEXT: v_readlane_b32 s36, v74, 2
+; GFX13-NEXT: v_readlane_b32 s35, v74, 1
+; GFX13-NEXT: v_readlane_b32 s34, v74, 0
+; GFX13-NEXT: s_or_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v74, off, s32 offset:72 nv
+; GFX13-NEXT: scratch_load_b32 v75, off, s32 offset:76 nv
+; GFX13-NEXT: scratch_load_b32 v76, off, s32 offset:80 nv
+; GFX13-NEXT: scratch_load_b32 v77, off, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -172055,6 +199600,1554 @@ define <64 x half> @bitcast_v128i8_to_v64f16(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v64f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v70, off, s32 offset:360
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v35, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v69, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v36, off, s32 offset:324
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v67, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v34, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v33, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v32, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v64, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:196
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v55, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:16
+; GFX13-TRUE16-NEXT: s_clause 0x1a
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v53, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v54, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v66, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v71, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v50, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v51, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v78, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v79, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:68
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v48, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v76, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v77, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v49, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v74, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v75, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v38, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v39, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v43.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v72.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v47.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v59.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v162.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v164.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v62.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v63.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v176.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v179.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v182.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v42.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v41.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v46.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v58.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v61.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v163.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v166.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v178.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v181.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v177.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v180.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v40.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v45.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v57.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v60.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v44.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v56.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v165.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v167.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3e
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v69.l, 8, v69.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v70.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v69.h, 8, v69.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v67.h, 8, v67.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v68.h, 8, v68.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v68.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v67.l, 8, v67.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v65.l, 8, v65.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v64.h, 8, v64.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x21
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v55.h, 8, v55.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1d
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v88
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1c
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v52.h, 8, v52.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1b
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v53.l, 8, v53.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1a
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v52.l, 8, v53.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x19
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v54.l, 8, v54.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x18
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v54.h, 8, v54.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x17
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v53.h, 8, v55.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x16
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v65.h, 8, v64.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x15
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v55.l, 8, v66.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x14
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v64.l, 8, v66.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x13
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v66.l, 8, v71.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x12
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v66.h, 8, v71.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v71.l, 8, v70.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v71.h, 8, v31.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v70.h, 8, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB92_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v118, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v101, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v45, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v116, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v56, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v61, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v83, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v134, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v181, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v17.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v100, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v119, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v42, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v43, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v87, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v114, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v60, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v59, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v19.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v82, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v144, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v167, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v166, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v180, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v179, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v21.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v86, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v46, v41, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v113, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v23.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v151, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v8.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v39.h, v52.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v38.h, v53.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v39.l, v52.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v49.h, v54.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v48.l, v54.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v48.h, v53.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v51.l, v65.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v49.l, v55.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v50.l, v64.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v51.h, v66.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v50.h, v66.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v32.l, v55.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v33.l, v64.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v32.h, v65.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v33.h, v67.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v35.l, v68.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v34.h, v68.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v34.l, v67.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v36.h, v69.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v36.l, v70.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v35.h, v69.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v38.l, v71.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v37.h, v71.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v37.l, v70.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_hi16
+; GFX13-TRUE16-NEXT: .LBB92_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB92_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v37.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v150.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v70.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v71.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v71.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v149.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v35.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v36.h, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v69.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v69.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v70.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v34.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v34.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.h, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v67.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v68.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v68.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v67.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v32.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v131.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v144.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v113.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v64.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v65.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v114.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v103.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v86.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v117.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v133.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v134.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v82.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v116.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v112.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v85.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v100.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v99.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v81.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v118.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v115.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v32.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v55.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x10
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v51.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v50.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xd
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v50.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v51.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v66.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v66.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v64.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v65.h, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v49.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v48.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v49.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v48.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v55.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v53.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v54.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v54.h, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v39.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v39.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v38.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v73.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v72.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v52.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v52.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v53.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v43.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v183.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v164.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v47.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v46.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v41.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v42.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v166.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v163.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v180.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v177.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v60.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v57.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v32.h, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v33.l, 8, v165.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v56.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v32.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v32.l, v33.l, v32.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v32.h, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v32.h
+; GFX13-TRUE16-NEXT: .LBB92_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:392 nv ; 4-byte Folded Reload
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xe
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v64f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v83, v24 :: v_dual_mov_b32 v68, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v69, v22 :: v_dual_mov_b32 v70, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, v18 :: v_dual_mov_b32 v66, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v67, v16 :: v_dual_mov_b32 v50, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v14 :: v_dual_mov_b32 v64, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v65, v12 :: v_dual_mov_b32 v32, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v10 :: v_dual_mov_b32 v53, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v8 :: v_dual_mov_b32 v33, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v6 :: v_dual_mov_b32 v39, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v4 :: v_dual_mov_b32 v34, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v2 :: v_dual_mov_b32 v36, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v37, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v0, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v1, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v2, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v3, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v4, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v5, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v6, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v7, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v8, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v9, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v10, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v11, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v12, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_b32 v13, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v14, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v15, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v16, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v17, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v18, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v19, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v20, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v21, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v22, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v23, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v24, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:12
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v30 :: v_dual_mov_b32 v85, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v86, v28 :: v_dual_mov_b32 v71, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v81, v26 :: v_dual_mov_b32 v82, v25
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3e
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v127, 8, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v126, 8, v1
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v125, 8, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v124, 8, v3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v123, 8, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v122, 8, v5
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v121, 8, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v120, 8, v7
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v111, 8, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v110, 8, v9
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v108, 8, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v109, 8, v11
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v107, 8, v12
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1d
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1c
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v72, 8, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1b
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v73, 8, v15
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1a
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v75, 8, v16
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x19
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v91, 8, v17
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x18
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v92, 8, v18
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x17
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v93, 8, v19
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x16
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v95, 8, v20
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x15
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v94, 8, v21
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x14
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v104, 8, v22
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v106, 8, v23
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x12
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v105, 8, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB92_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v35, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v38, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v65, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v67, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v55, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v80, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v83, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v81, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v7, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v9, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v11, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v84, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v113, v72, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v102, v73, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v133, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v103, v75, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v145, v91, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v134, v92, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v150, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v135, v93, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v14, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v165, v95, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v148, v94, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v164, v104, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v181, v106, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v177, v105, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v119, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v112, v107, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v100, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v97, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v13, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v15, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v17, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v19, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v116, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v101, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v130, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v117, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v146, v144, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v131, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v162, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v151, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v163, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v40, v182, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v179, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v41, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v45, v109, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v42, v108, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v58, v56, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v46, v110, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v59, v111, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v47, v120, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v23, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v29, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v30, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v63, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v57, v121, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v74, v122, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v60, v123, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v77, v76, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v62, v124, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v88, v125, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v78, v126, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v79, v127, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v32, v31, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v33, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v36, v35, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: .LBB92_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB92_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v89
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v79, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v88, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v78, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v76
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v127, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v125, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v126, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v77, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v76, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v77, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v62, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v74, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v60, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v63, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v61
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v124, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v122, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v123, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v57, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v57, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v60, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v121, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v59, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v47, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v56
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v46, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v111, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v120, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v110, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v45, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v45, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v47, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v109, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v42, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v43
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v41, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v183
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v182
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v108, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v179, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v167, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v179, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v166
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v163, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v160
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v151, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v149
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v149, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v146, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v144
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v144, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v146, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v131, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v129
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v128
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v117, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v115
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v114
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v101, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v99
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v99, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v101, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v98
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v97, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v119, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v112, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v87, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v107, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v181, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v97, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v98, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v106, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v177, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0xd
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v176
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v164, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v165, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v105, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v104, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v95, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v148, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v100, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v112, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v94, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v147
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v135, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v145, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v134, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v114, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v93, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v91, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v92, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v133, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v115, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v116, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v103, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v113, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v102, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v75, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v72, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v73, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v84, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v96
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v84, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v85, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v83, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v82
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v81, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v69, v69, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v68, 8, v68
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v70, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v67, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v66
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v68, v69, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v66, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v67, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v65, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v68, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v55, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v51, 8, v51
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v50, 8, v50
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v51, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v50, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v48, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v48, v49, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v38, v38, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v37, v37, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v34
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v39, v39, v48, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v36, v37, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v34, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v33, v38, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v32, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v37, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v34, v35, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v33, v32, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v37, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v68, v67, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v70, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v85, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v84, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v116, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v115, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v114, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v112, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v100, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v98, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v97, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v87, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v101, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v99, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v146, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v149, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v179, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v167, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v47, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v45, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v46, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v60, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v57, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v77, v30, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v76, v31, 0x5040100
+; GFX13-FAKE16-NEXT: .LBB92_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -176574,6 +205667,1126 @@ define inreg <64 x half> @bitcast_v128i8_to_v64f16_scalar(<128 x i8> inreg %a, i
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:320 ; 4-byte Folded Reload
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v64f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB93_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, 0xc0c0004 :: v_dual_lshlrev_b32 v13, 8, v86
+; GFX13-TRUE16-NEXT: s_and_b32 s76, s43, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s77, s11, 8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 8, v37
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s2, s3, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s26, s27, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s18, s19, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s9, s4, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s40, s8, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s14, s7, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s12, s6, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s76
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s61, s45, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s15, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s58, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s59, s44, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v68
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s41, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s89, s10, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s73, s42, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s88, s88, s89
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s88 :: v_dual_bitop2_b32 v10, v10, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v14, 0xff, v114
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s74, 0xff
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v15, 8, v70 :: v_dual_bitop2_b32 v12, s88, v13 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v38
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v13, 8, v32 :: v_dual_bitop2_b32 v8, v14, v15 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v14, 0xff, v83
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xff, v50
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 8, v33 :: v_dual_lshlrev_b32 v17, 8, v39
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 8, v64 :: v_dual_bitop2_b32 v10, v10, v13 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v134, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v8.l
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v25, 8, v119 :: v_dual_bitop2_b32 v8, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 8, v82 :: v_dual_bitop2_b32 v14, v14, v17 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v53, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v99, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v66, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v97, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v71, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v103, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v69, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v116, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v84, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v130, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v98, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v145, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v113, v55, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v147, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v118, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v117
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v151, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xff, v131
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v164
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v10, v24
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xff, v149
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v29, 8, v101
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xff, v160
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v8, v25
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v26, v27
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 8, v87
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v144
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v176, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v167
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 8, v128 :: v_dual_bitop2_b32 v10, v10, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 8, v102
+; GFX13-TRUE16-NEXT: s_and_b32 s77, s63, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s76, s57, 8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v26, v8, v27
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 8, v132 :: v_dual_bitop2_b32 v8, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v162
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v177, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v179
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v29, 8, v150 :: v_dual_bitop2_b32 v10, v10, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s56, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s79, s5, 8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v30, v31
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v8, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xff, v166
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 8, v133
+; GFX13-TRUE16-NEXT: s_or_b32 s76, s77, s76
+; GFX13-TRUE16-NEXT: s_or_b32 s77, s78, s79
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s62, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s79, s47, 8
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s46, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s89, s13, 8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v165
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v10, 8, v129
+; GFX13-TRUE16-NEXT: s_or_b32 s78, s78, s79
+; GFX13-TRUE16-NEXT: s_or_b32 s79, s88, s89
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s76, s76, s77
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s77, s78, s79
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v40, 0xff, v182
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v31, 8, v178 :: v_dual_bitop2_b32 v41, v29, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s76 :: v_dual_bitop2_b32 v183, v8, v10 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v181, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v40, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v180, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s77
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v30.h, v183.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v31.h, v41.l
+; GFX13-TRUE16-NEXT: s_branch .LBB93_3
+; GFX13-TRUE16-NEXT: .LBB93_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB93_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB93_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v0, 3, v180 :: v_dual_add_nc_u32 v1, 3, v166
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v182 :: v_dual_add_nc_u32 v3, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v181
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s59, s59, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v133, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v160
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v179 :: v_dual_add_nc_u32 v4, 3, v162
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v129, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v1, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v177
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v102, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v149
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v132, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v167
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v144
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v176
+; GFX13-TRUE16-NEXT: s_add_co_i32 s73, s73, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v101, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v131
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v164
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v87, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v117
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v151 :: v_dual_add_nc_u32 v4, 3, v118
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v82, 0x300, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v147
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v64, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v113
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v85, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v135 :: v_dual_add_nc_u32 v3, 3, v98
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v55, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v145
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v55, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v130
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v52, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v69
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v116 :: v_dual_add_nc_u32 v4, 3, v71
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 0x300, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v103
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v66
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v51, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v97 :: v_dual_add_nc_u32 v4, 3, v99
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v53
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v114
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v50
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v38
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v134
+; GFX13-TRUE16-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v68
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s74, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s47, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v38, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s73, s42, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s56, s5, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v37, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s59, s44, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s43, s11, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s61, s61, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s72, s58, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s41, s10, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s46, s13, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v50, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v53, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s12, s6, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s60, s15, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s61, s45, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s63, s63, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v65, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s28, s29, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v39, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s63, s57, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v48, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s9, s4, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s20, s21, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s14, s7, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, s40, s8, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v67, s26, s27, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v68, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s22, s23, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v69, s2, s3, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v70, s18, s19, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v66, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v71, s16, s17, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v80, s0, s1, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v54, 0x300, v54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v67, 0x300, v67
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v69, 0x300, v69
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v70, 0x300, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v81, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v71
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v80
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v85.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v87.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v101.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v28.h, v132.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v102.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v30.h, v129.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v31.h, v133.l
+; GFX13-TRUE16-NEXT: .LBB93_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v64f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:192
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:64
+; GFX13-FAKE16-NEXT: s_clause 0x10
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB93_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s74, 0xff
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xff, v48
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 8, v32
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v67, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s20, s21, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s24, s25, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s28, s29, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s11, s8, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s6, s4, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s7, s5, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v80, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v68, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v69, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v11
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v35
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s26, s27, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s15, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s44, s41, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s12, s9, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v116, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_lshl_b32 s77, s43, 8
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v118, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s14, s10, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, s76, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xff, v38
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 8, v117
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s46, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xff, v53
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v15, 8, v37
+; GFX13-FAKE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v11, 16, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v14, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xff, v50
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v15, 8, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v9, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xff, v49
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v10, 8, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v14, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v82, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v115, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xff, v130
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v14
+; GFX13-FAKE16-NEXT: s_lshl_b32 s77, s47, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v9, 16, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v96, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v98, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v86, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v15, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v71, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s40, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s79, s13, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s88, s61, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v102, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s60, s57, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v19, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v87, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v27, 8, v144
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v29, 8, v135
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s73, s72, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 8, v150
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v112, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, s76, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v132, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s58, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v11, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v113, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-FAKE16-NEXT: s_or_b32 s77, s78, s79
+; GFX13-FAKE16-NEXT: s_lshl_b32 s78, s59, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v11, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v23, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v134
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v119
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s76, s76, s77
+; GFX13-FAKE16-NEXT: s_and_b32 s77, s62, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s79, s45, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s77, s77, s78
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v24, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xff, v131
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 8, v114
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s56, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_or_b32 s78, s78, s79
+; GFX13-FAKE16-NEXT: s_and_b32 s79, s63, 0xff
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v24, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v146, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s77, s77, s78
+; GFX13-FAKE16-NEXT: s_or_b32 s78, s79, s88
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v160
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v147
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v25, 16, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xff, v148
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v26, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xff, v149
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v27, 8, v133
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v26, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v162, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v177
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v164
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v27, 16, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xff, v151
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v28, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xff, v176
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v29, 8, v161
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v28, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v179, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v181
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v29, 16, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xff, v178
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xff, v180
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v31, 8, v166 :: v_dual_bitop2_b32 v30, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v11, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v182, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v40, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, s78, 16, v8
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, s76
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v183, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, s77
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v31, 16, v40
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v30, 16, v183
+; GFX13-FAKE16-NEXT: s_branch .LBB93_3
+; GFX13-FAKE16-NEXT: .LBB93_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB93_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB93_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v0, 3, v182 :: v_dual_add_nc_u32 v1, 3, v180
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v181 :: v_dual_add_nc_u32 v3, 3, v178
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v4, 3, v179 :: v_dual_add_nc_u32 v5, 3, v176
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v177
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v4, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v5, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v151
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v164, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v150, 0x300, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v149 :: v_dual_add_nc_u32 v4, 3, v148
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v151, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v162
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v160
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v133, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v144, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v144, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 3, v134
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v135, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v131
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s73, s73, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v130
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v115
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v115, 0x300, v0
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v0, 3, v118 :: v_dual_add_nc_u32 v2, 3, v113
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v112
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v114, 0x300, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v116
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v97, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v99, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v100, 0x300, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v98 :: v_dual_add_nc_u32 v4, 3, v96
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v87
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s63, s63, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v86
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v71, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v82
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 3, v69
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v68
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v70, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v80
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v52, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v54, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v65
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v55, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v50 :: v_dual_add_nc_u32 v2, 3, v53
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v67
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v49
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v48
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v2
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s74, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s73, s72, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s62, s59, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s63, s61, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s40, s13, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v39, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s12, s9, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s56, s45, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s60, s57, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s46, s43, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s58, s47, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s11, s8, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v50, s24, s25, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, s0, s1, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v37, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v38, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s44, s41, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s14, s10, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s42, s15, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v51, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v50, 0x300, v50
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s26, s27, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v67, s2, s3, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v65, 0x300, v65
+; GFX13-FAKE16-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v48, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v49, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s7, s5, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, s16, s17, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v67, 0x300, v67
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v65
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v69, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v38
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s6, s4, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v53, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s20, s21, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v66, s18, s19, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v64, 0x300, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v67, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v69, 16, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v39, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v37, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v35, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v32, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v34, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v71
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v17
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s22, s23, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v66, 0x300, v66
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v68, 0x300, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v55, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v52, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v20, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v21, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v99
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v115
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v66, 16, v64
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v68
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v53, 16, v51
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v100, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v97, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v25, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v26, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v135
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v151
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v6, 16, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v49, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v10, 16, v50
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v11, 16, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v15, 16, v37
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v16, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v70, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v114, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v144, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v133, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v150, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v30, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v31, 16, v35
+; GFX13-FAKE16-NEXT: .LBB93_5: ; %end
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:320 nv ; 4-byte Folded Reload
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -181454,6 +211667,892 @@ define <128 x i8> @bitcast_v64f16_to_v128i8(<64 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:92
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v64f16_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x18
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:96 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:92 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB94_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[1:2]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 24, v16 :: v_dual_lshrrev_b32 v71, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v16 :: v_dual_lshrrev_b32 v81, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 8, v15 :: v_dual_lshrrev_b32 v83, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v14 :: v_dual_lshrrev_b32 v85, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 16, v13 :: v_dual_lshrrev_b32 v87, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 24, v12 :: v_dual_lshrrev_b32 v97, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v12 :: v_dual_lshrrev_b32 v99, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v101, 8, v11 :: v_dual_lshrrev_b32 v103, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v113, 16, v10 :: v_dual_lshrrev_b32 v115, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v117, 16, v9 :: v_dual_lshrrev_b32 v119, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v131, 24, v8 :: v_dual_lshrrev_b32 v132, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v8 :: v_dual_lshrrev_b32 v135, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 8, v7 :: v_dual_lshrrev_b32 v148, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v149, 16, v6 :: v_dual_lshrrev_b32 v151, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v161, 16, v5 :: v_dual_lshrrev_b32 v163, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v4 :: v_dual_lshrrev_b32 v176, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v4 :: v_dual_lshrrev_b32 v179, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 8, v3 :: v_dual_lshrrev_b32 v40, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v41, 16, v2 :: v_dual_lshrrev_b32 v43, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v45, 16, v1 :: v_dual_lshrrev_b32 v46, 8, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 24, v32 :: v_dual_lshrrev_b32 v102, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 8, v32 :: v_dual_lshrrev_b32 v114, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v31 :: v_dual_lshrrev_b32 v118, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v30 :: v_dual_lshrrev_b32 v129, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 16, v29 :: v_dual_lshrrev_b32 v133, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 24, v28 :: v_dual_lshrrev_b32 v145, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v147, 8, v28 :: v_dual_lshrrev_b32 v150, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v27 :: v_dual_lshrrev_b32 v162, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v26 :: v_dual_lshrrev_b32 v165, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v167, 16, v25 :: v_dual_lshrrev_b32 v177, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 24, v24 :: v_dual_lshrrev_b32 v181, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v183, 8, v24 :: v_dual_lshrrev_b32 v42, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v23 :: v_dual_lshrrev_b32 v47, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v22 :: v_dual_lshrrev_b32 v57, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 16, v21 :: v_dual_lshrrev_b32 v59, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 24, v20 :: v_dual_lshrrev_b32 v61, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v20 :: v_dual_lshrrev_b32 v63, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 8, v19 :: v_dual_lshrrev_b32 v73, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v18 :: v_dual_lshrrev_b32 v75, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v76, 16, v17 :: v_dual_lshrrev_b32 v77, 8, v17
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[68:69], 24, v[17:18]
+; GFX13-TRUE16-NEXT: .LBB94_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB94_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v32, 0x200, v32 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[68:69], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 24, v16 :: v_dual_lshrrev_b32 v71, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v16 :: v_dual_lshrrev_b32 v81, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 8, v15 :: v_dual_lshrrev_b32 v83, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v14 :: v_dual_lshrrev_b32 v85, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 16, v13 :: v_dual_lshrrev_b32 v87, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 24, v12 :: v_dual_lshrrev_b32 v97, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v12 :: v_dual_lshrrev_b32 v99, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v101, 8, v11 :: v_dual_lshrrev_b32 v103, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v113, 16, v10 :: v_dual_lshrrev_b32 v115, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v117, 16, v9 :: v_dual_lshrrev_b32 v119, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v131, 24, v8 :: v_dual_lshrrev_b32 v132, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v8 :: v_dual_lshrrev_b32 v135, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 8, v7 :: v_dual_lshrrev_b32 v148, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v149, 16, v6 :: v_dual_lshrrev_b32 v151, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v161, 16, v5 :: v_dual_lshrrev_b32 v163, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v4 :: v_dual_lshrrev_b32 v176, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v4 :: v_dual_lshrrev_b32 v179, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 8, v3 :: v_dual_lshrrev_b32 v40, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v41, 16, v2 :: v_dual_lshrrev_b32 v43, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v45, 16, v1 :: v_dual_lshrrev_b32 v46, 8, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 24, v32 :: v_dual_lshrrev_b32 v102, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 8, v32 :: v_dual_lshrrev_b32 v114, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v31 :: v_dual_lshrrev_b32 v118, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v30 :: v_dual_lshrrev_b32 v129, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 16, v29 :: v_dual_lshrrev_b32 v133, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 24, v28 :: v_dual_lshrrev_b32 v145, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v147, 8, v28 :: v_dual_lshrrev_b32 v150, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v27 :: v_dual_lshrrev_b32 v162, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v26 :: v_dual_lshrrev_b32 v165, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v167, 16, v25 :: v_dual_lshrrev_b32 v177, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 24, v24 :: v_dual_lshrrev_b32 v181, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v183, 8, v24 :: v_dual_lshrrev_b32 v42, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v23 :: v_dual_lshrrev_b32 v47, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v22 :: v_dual_lshrrev_b32 v57, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 16, v21 :: v_dual_lshrrev_b32 v59, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 24, v20 :: v_dual_lshrrev_b32 v61, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v20 :: v_dual_lshrrev_b32 v63, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 8, v19 :: v_dual_lshrrev_b32 v73, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v18 :: v_dual_lshrrev_b32 v75, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v76, 16, v17 :: v_dual_lshrrev_b32 v77, 8, v17
+; GFX13-TRUE16-NEXT: .LBB94_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v45, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v43, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v179, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v35, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v39, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v176, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v50, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v161, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v135, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v132, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v35, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v39, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v50, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v117, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v113, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v99, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v51, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v55, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v64, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v35, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v39, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v50, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v51, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v86, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v84, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v81, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v77, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v76, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v74, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v63, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v59, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v58, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v42, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v167, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v164, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v150, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v130, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v128, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v114, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v102, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x15 ; 88-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:92 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:96 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v64f16_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x17
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:92 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB94_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 24, v16 :: v_dual_lshrrev_b32 v70, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 8, v16 :: v_dual_lshrrev_b32 v80, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 8, v15 :: v_dual_lshrrev_b32 v82, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v14 :: v_dual_lshrrev_b32 v84, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v85, 16, v13 :: v_dual_lshrrev_b32 v86, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v87, 24, v12 :: v_dual_lshrrev_b32 v96, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v97, 8, v12 :: v_dual_lshrrev_b32 v98, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v99, 8, v11 :: v_dual_lshrrev_b32 v100, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v101, 16, v10 :: v_dual_lshrrev_b32 v102, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v103, 16, v9 :: v_dual_lshrrev_b32 v112, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v113, 24, v8 :: v_dual_lshrrev_b32 v114, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v115, 8, v8 :: v_dual_lshrrev_b32 v116, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v117, 8, v7 :: v_dual_lshrrev_b32 v118, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v119, 16, v6 :: v_dual_lshrrev_b32 v128, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v129, 16, v5 :: v_dual_lshrrev_b32 v130, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v131, 24, v4 :: v_dual_lshrrev_b32 v132, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v133, 8, v4 :: v_dual_lshrrev_b32 v134, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v145, 8, v3 :: v_dual_lshrrev_b32 v147, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v149, 16, v2 :: v_dual_lshrrev_b32 v151, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v161, 16, v1 :: v_dual_lshrrev_b32 v162, 8, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v135, 24, v32 :: v_dual_lshrrev_b32 v144, 16, v32
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 8, v32 :: v_dual_lshrrev_b32 v148, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v31 :: v_dual_lshrrev_b32 v160, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v163, 16, v30 :: v_dual_lshrrev_b32 v164, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v165, 16, v29 :: v_dual_lshrrev_b32 v166, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v167, 24, v28 :: v_dual_lshrrev_b32 v176, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v177, 8, v28 :: v_dual_lshrrev_b32 v178, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v179, 8, v27 :: v_dual_lshrrev_b32 v180, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v181, 16, v26 :: v_dual_lshrrev_b32 v182, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v183, 16, v25 :: v_dual_lshrrev_b32 v40, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v41, 24, v24 :: v_dual_lshrrev_b32 v42, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v43, 8, v24 :: v_dual_lshrrev_b32 v44, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v45, 8, v23 :: v_dual_lshrrev_b32 v46, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v47, 16, v22 :: v_dual_lshrrev_b32 v56, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v57, 16, v21 :: v_dual_lshrrev_b32 v58, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v59, 24, v20 :: v_dual_lshrrev_b32 v60, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v61, 8, v20 :: v_dual_lshrrev_b32 v62, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v63, 8, v19 :: v_dual_lshrrev_b32 v72, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v73, 16, v18 :: v_dual_lshrrev_b32 v74, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v75, 16, v17 :: v_dual_lshrrev_b32 v76, 8, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[17:18]
+; GFX13-FAKE16-NEXT: .LBB94_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB94_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v32, 0x200, v32 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 24, v16 :: v_dual_lshrrev_b32 v70, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 8, v16 :: v_dual_lshrrev_b32 v80, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 8, v15 :: v_dual_lshrrev_b32 v82, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v14 :: v_dual_lshrrev_b32 v84, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v85, 16, v13 :: v_dual_lshrrev_b32 v86, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v87, 24, v12 :: v_dual_lshrrev_b32 v96, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v97, 8, v12 :: v_dual_lshrrev_b32 v98, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v99, 8, v11 :: v_dual_lshrrev_b32 v100, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v101, 16, v10 :: v_dual_lshrrev_b32 v102, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v103, 16, v9 :: v_dual_lshrrev_b32 v112, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v113, 24, v8 :: v_dual_lshrrev_b32 v114, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v115, 8, v8 :: v_dual_lshrrev_b32 v116, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v117, 8, v7 :: v_dual_lshrrev_b32 v118, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v119, 16, v6 :: v_dual_lshrrev_b32 v128, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v129, 16, v5 :: v_dual_lshrrev_b32 v130, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v131, 24, v4 :: v_dual_lshrrev_b32 v132, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v133, 8, v4 :: v_dual_lshrrev_b32 v134, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v145, 8, v3 :: v_dual_lshrrev_b32 v147, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v149, 16, v2 :: v_dual_lshrrev_b32 v151, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v161, 16, v1 :: v_dual_lshrrev_b32 v162, 8, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v135, 24, v32 :: v_dual_lshrrev_b32 v144, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 8, v32 :: v_dual_lshrrev_b32 v148, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v31 :: v_dual_lshrrev_b32 v160, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v163, 16, v30 :: v_dual_lshrrev_b32 v164, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v165, 16, v29 :: v_dual_lshrrev_b32 v166, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v167, 24, v28 :: v_dual_lshrrev_b32 v176, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v177, 8, v28 :: v_dual_lshrrev_b32 v178, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v179, 8, v27 :: v_dual_lshrrev_b32 v180, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v181, 16, v26 :: v_dual_lshrrev_b32 v182, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v183, 16, v25 :: v_dual_lshrrev_b32 v40, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v41, 24, v24 :: v_dual_lshrrev_b32 v42, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v43, 8, v24 :: v_dual_lshrrev_b32 v44, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v45, 8, v23 :: v_dual_lshrrev_b32 v46, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v47, 16, v22 :: v_dual_lshrrev_b32 v56, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v57, 16, v21 :: v_dual_lshrrev_b32 v58, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v59, 24, v20 :: v_dual_lshrrev_b32 v60, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v61, 8, v20 :: v_dual_lshrrev_b32 v62, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v63, 8, v19 :: v_dual_lshrrev_b32 v72, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v73, 16, v18 :: v_dual_lshrrev_b32 v74, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v75, 16, v17 :: v_dual_lshrrev_b32 v76, 8, v17
+; GFX13-FAKE16-NEXT: .LBB94_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v161, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v51, v149, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v134, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v37, v116, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v51, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v48, v129, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v51, v119, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v37, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v103, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v37, v101, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v98, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v48, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v51, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v52, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v36, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v37, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v35, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v85, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v83, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v80, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v76, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v75, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v74, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v73, v72, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v62, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v57, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v56, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v47, v46, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v44, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v183, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v182, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v181, v180, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v178, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v165, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v164, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v163, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v148, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x14 ; 84-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:92 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -186571,6 +217670,849 @@ define inreg <128 x i8> @bitcast_v64f16_to_v128i8_scalar(<64 x half> inreg %a, i
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_or_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v74, s32 offset:72 nv
+; GFX13-NEXT: scratch_store_b32 off, v75, s32 offset:76 nv
+; GFX13-NEXT: scratch_store_b32 off, v76, s32 offset:80 nv
+; GFX13-NEXT: scratch_store_b32 off, v77, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v40, s32 offset:68 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v41, s32 offset:64 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v42, s32 offset:60 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v43, s32 offset:56 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v44, s32 offset:52 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v45, s32 offset:48 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v46, s32 offset:44 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v47, s32 offset:40 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v56, s32 offset:36 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v57, s32 offset:32 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v58, s32 offset:28 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v59, s32 offset:24 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v60, s32 offset:20 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v61, s32 offset:16 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v62, s32 offset:12 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v63, s32 offset:8 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v72, s32 offset:4 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v73, s32 nv
+; GFX13-NEXT: v_writelane_b32 v74, s34, 0
+; GFX13-NEXT: v_writelane_b32 v74, s35, 1
+; GFX13-NEXT: v_writelane_b32 v74, s36, 2
+; GFX13-NEXT: v_writelane_b32 v74, s37, 3
+; GFX13-NEXT: v_writelane_b32 v74, s38, 4
+; GFX13-NEXT: v_writelane_b32 v74, s39, 5
+; GFX13-NEXT: v_writelane_b32 v74, s48, 6
+; GFX13-NEXT: v_writelane_b32 v74, s49, 7
+; GFX13-NEXT: v_writelane_b32 v74, s50, 8
+; GFX13-NEXT: v_writelane_b32 v74, s51, 9
+; GFX13-NEXT: v_writelane_b32 v74, s52, 10
+; GFX13-NEXT: v_writelane_b32 v74, s53, 11
+; GFX13-NEXT: v_writelane_b32 v74, s54, 12
+; GFX13-NEXT: v_writelane_b32 v74, s55, 13
+; GFX13-NEXT: v_writelane_b32 v74, s64, 14
+; GFX13-NEXT: v_writelane_b32 v74, s65, 15
+; GFX13-NEXT: v_writelane_b32 v74, s66, 16
+; GFX13-NEXT: v_writelane_b32 v74, s67, 17
+; GFX13-NEXT: v_writelane_b32 v74, s68, 18
+; GFX13-NEXT: v_writelane_b32 v74, s69, 19
+; GFX13-NEXT: v_writelane_b32 v74, s70, 20
+; GFX13-NEXT: v_writelane_b32 v74, s71, 21
+; GFX13-NEXT: v_writelane_b32 v74, s80, 22
+; GFX13-NEXT: v_writelane_b32 v74, s81, 23
+; GFX13-NEXT: v_writelane_b32 v74, s82, 24
+; GFX13-NEXT: v_writelane_b32 v74, s83, 25
+; GFX13-NEXT: v_writelane_b32 v74, s84, 26
+; GFX13-NEXT: v_writelane_b32 v74, s85, 27
+; GFX13-NEXT: v_writelane_b32 v74, s86, 28
+; GFX13-NEXT: v_writelane_b32 v74, s87, 29
+; GFX13-NEXT: v_writelane_b32 v74, s96, 30
+; GFX13-NEXT: v_writelane_b32 v74, s97, 31
+; GFX13-NEXT: v_writelane_b32 v75, s98, 0
+; GFX13-NEXT: v_writelane_b32 v75, s99, 1
+; GFX13-NEXT: v_writelane_b32 v75, s100, 2
+; GFX13-NEXT: v_writelane_b32 v75, s101, 3
+; GFX13-NEXT: v_writelane_b32 v75, s102, 4
+; GFX13-NEXT: v_writelane_b32 v75, s103, 5
+; GFX13-NEXT: v_writelane_b32 v75, s104, 6
+; GFX13-NEXT: v_writelane_b32 v75, s30, 7
+; GFX13-NEXT: v_writelane_b32 v75, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s5, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s7, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s9, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s13, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s15, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s100, 0
+; GFX13-NEXT: ; implicit-def: $vgpr76 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr77 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB95_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s42, s27, 24
+; GFX13-NEXT: s_lshr_b32 s30, s5, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s31, s5, 16
+; GFX13-NEXT: s_lshr_b32 s35, s5, 8
+; GFX13-NEXT: s_lshr_b32 s34, s4, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s27, 8
+; GFX13-NEXT: s_lshr_b32 s36, s4, 8
+; GFX13-NEXT: s_lshr_b32 s37, s7, 24
+; GFX13-NEXT: s_lshr_b32 s38, s7, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-NEXT: s_lshr_b32 s48, s7, 8
+; GFX13-NEXT: s_lshr_b32 s39, s6, 16
+; GFX13-NEXT: s_lshr_b32 s49, s6, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s26, 8
+; GFX13-NEXT: s_lshr_b32 s50, s9, 24
+; GFX13-NEXT: s_lshr_b32 s51, s9, 16
+; GFX13-NEXT: s_lshr_b32 s53, s9, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s25, 24
+; GFX13-NEXT: s_lshr_b32 s52, s8, 16
+; GFX13-NEXT: s_lshr_b32 s54, s8, 8
+; GFX13-NEXT: s_lshr_b32 s55, s11, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s25, 16
+; GFX13-NEXT: s_lshr_b32 s64, s11, 16
+; GFX13-NEXT: s_lshr_b32 s66, s11, 8
+; GFX13-NEXT: s_lshr_b32 s65, s10, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s25, 8
+; GFX13-NEXT: s_lshr_b32 s67, s10, 8
+; GFX13-NEXT: s_lshr_b32 s68, s13, 24
+; GFX13-NEXT: s_lshr_b32 s69, s13, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 0
+; GFX13-NEXT: s_lshr_b32 s42, s24, 16
+; GFX13-NEXT: s_lshr_b32 s71, s13, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 31
+; GFX13-NEXT: s_lshr_b32 s42, s24, 8
+; GFX13-NEXT: s_lshr_b32 s70, s12, 16
+; GFX13-NEXT: s_lshr_b32 s80, s12, 8
+; GFX13-NEXT: s_lshr_b32 s81, s15, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 30
+; GFX13-NEXT: s_lshr_b32 s42, s23, 24
+; GFX13-NEXT: s_lshr_b32 s82, s15, 16
+; GFX13-NEXT: s_lshr_b32 s84, s15, 8
+; GFX13-NEXT: s_lshr_b32 s83, s14, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 29
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s85, s14, 8
+; GFX13-NEXT: s_lshr_b32 s86, s41, 24
+; GFX13-NEXT: s_lshr_b32 s87, s41, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 28
+; GFX13-NEXT: s_lshr_b32 s42, s23, 8
+; GFX13-NEXT: s_lshr_b32 s97, s41, 8
+; GFX13-NEXT: s_lshr_b32 s96, s40, 16
+; GFX13-NEXT: s_lshr_b32 s98, s40, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 27
+; GFX13-NEXT: s_lshr_b32 s42, s22, 16
+; GFX13-NEXT: s_lshr_b32 s99, s29, 24
+; GFX13-NEXT: s_lshr_b32 s101, s29, 16
+; GFX13-NEXT: s_lshr_b32 s103, s29, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 26
+; GFX13-NEXT: s_lshr_b32 s42, s22, 8
+; GFX13-NEXT: s_lshr_b32 s102, s28, 16
+; GFX13-NEXT: s_lshr_b32 s104, s28, 8
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 25
+; GFX13-NEXT: s_lshr_b32 s42, s21, 24
+; GFX13-NEXT: s_lshr_b64 s[62:63], s[24:25], 24
+; GFX13-NEXT: s_lshr_b64 s[60:61], s[22:23], 24
+; GFX13-NEXT: s_lshr_b64 s[58:59], s[20:21], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 24
+; GFX13-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-NEXT: s_lshr_b64 s[56:57], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[46:47], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[44:45], s[2:3], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 23
+; GFX13-NEXT: s_lshr_b32 s42, s21, 8
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[4:5], 24
+; GFX13-NEXT: s_lshr_b64 s[76:77], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[78:79], s[8:9], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 22
+; GFX13-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[10:11], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[12:13], 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[14:15], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 21
+; GFX13-NEXT: s_lshr_b32 s42, s20, 8
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[28:29], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 20
+; GFX13-NEXT: s_lshr_b32 s42, s19, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 19
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 18
+; GFX13-NEXT: s_lshr_b32 s42, s19, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 17
+; GFX13-NEXT: s_lshr_b32 s42, s18, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 16
+; GFX13-NEXT: s_lshr_b32 s42, s18, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 15
+; GFX13-NEXT: s_lshr_b32 s42, s17, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 14
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 13
+; GFX13-NEXT: s_lshr_b32 s42, s17, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 12
+; GFX13-NEXT: s_lshr_b32 s42, s16, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 11
+; GFX13-NEXT: s_lshr_b32 s42, s16, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 10
+; GFX13-NEXT: s_lshr_b32 s42, s3, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 9
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 8
+; GFX13-NEXT: s_lshr_b32 s42, s3, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s2, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s2, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s1, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s0, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s0, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 0
+; GFX13-NEXT: s_lshr_b64 s[42:43], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB95_3
+; GFX13-NEXT: .LBB95_2:
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: s_mov_b32 s100, -1
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr103
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr30
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: .LBB95_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s43, s100, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v34, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v33, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v36, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v35, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_lshrrev_b64 v[51:52], 24, v[17:18]
+; GFX13-NEXT: v_lshrrev_b64 v[64:65], 24, v[27:28]
+; GFX13-NEXT: v_lshrrev_b64 v[52:53], 24, v[19:20]
+; GFX13-NEXT: v_lshrrev_b64 v[65:66], 24, v[29:30]
+; GFX13-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-NEXT: v_lshrrev_b64 v[69:70], 24, v[33:34]
+; GFX13-NEXT: v_lshrrev_b64 v[37:38], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[48:49], 24, v[9:10]
+; GFX13-NEXT: v_lshrrev_b64 v[66:67], 24, v[13:14]
+; GFX13-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-NEXT: v_lshrrev_b64 v[70:71], 24, v[35:36]
+; GFX13-NEXT: v_lshrrev_b64 v[25:26], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[31:32], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[38:39], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[49:50], 24, v[11:12]
+; GFX13-NEXT: v_lshrrev_b64 v[67:68], 24, v[15:16]
+; GFX13-NEXT: v_dual_lshrrev_b32 v148, 24, v18 :: v_dual_lshrrev_b32 v147, 16, v18
+; GFX13-NEXT: v_dual_lshrrev_b32 v146, 8, v18 :: v_dual_lshrrev_b32 v160, 16, v17
+; GFX13-NEXT: v_dual_lshrrev_b32 v150, 8, v17 :: v_dual_lshrrev_b32 v162, 24, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v161, 16, v20 :: v_dual_lshrrev_b32 v149, 8, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v163, 16, v19 :: v_dual_lshrrev_b32 v151, 8, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v166, 24, v22 :: v_dual_lshrrev_b32 v165, 16, v22
+; GFX13-NEXT: v_dual_lshrrev_b32 v164, 8, v22 :: v_dual_lshrrev_b32 v178, 16, v21
+; GFX13-NEXT: v_dual_lshrrev_b32 v176, 8, v21 :: v_dual_lshrrev_b32 v180, 24, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v179, 16, v24 :: v_dual_lshrrev_b32 v167, 8, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v181, 16, v23 :: v_dual_lshrrev_b32 v177, 8, v23
+; GFX13-NEXT: v_dual_lshrrev_b32 v42, 24, v28 :: v_dual_lshrrev_b32 v41, 16, v28
+; GFX13-NEXT: v_dual_lshrrev_b32 v183, 8, v28 :: v_dual_lshrrev_b32 v43, 16, v27
+; GFX13-NEXT: v_dual_lshrrev_b32 v182, 8, v27 :: v_dual_lshrrev_b32 v46, 24, v30
+; GFX13-NEXT: v_dual_lshrrev_b32 v44, 16, v30 :: v_dual_lshrrev_b32 v40, 8, v30
+; GFX13-NEXT: v_dual_lshrrev_b32 v47, 16, v29 :: v_dual_lshrrev_b32 v45, 8, v29
+; GFX13-NEXT: v_dual_lshrrev_b32 v59, 24, v34 :: v_dual_lshrrev_b32 v58, 16, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v57, 8, v34 :: v_dual_lshrrev_b32 v60, 16, v33
+; GFX13-NEXT: v_dual_lshrrev_b32 v56, 8, v33 :: v_dual_lshrrev_b32 v72, 24, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v62, 16, v36 :: v_dual_lshrrev_b32 v61, 8, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v73, 16, v35 :: v_dual_lshrrev_b32 v63, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v50, 24, v2 :: v_dual_lshrrev_b32 v39, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 8, v2 :: v_dual_lshrrev_b32 v71, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v32, 8, v1 :: v_dual_lshrrev_b32 v81, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v80, 16, v4 :: v_dual_lshrrev_b32 v55, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v84, 16, v3 :: v_dual_lshrrev_b32 v82, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v86, 24, v6 :: v_dual_lshrrev_b32 v85, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v83, 8, v6 :: v_dual_lshrrev_b32 v97, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v87, 8, v5 :: v_dual_lshrrev_b32 v100, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v99, 16, v8 :: v_dual_lshrrev_b32 v96, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v101, 16, v7 :: v_dual_lshrrev_b32 v98, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v112, 24, v10 :: v_dual_lshrrev_b32 v103, 16, v10
+; GFX13-NEXT: v_dual_lshrrev_b32 v102, 8, v10 :: v_dual_lshrrev_b32 v115, 16, v9
+; GFX13-NEXT: v_dual_lshrrev_b32 v113, 8, v9 :: v_dual_lshrrev_b32 v118, 24, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v117, 16, v12 :: v_dual_lshrrev_b32 v114, 8, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v119, 16, v11 :: v_dual_lshrrev_b32 v116, 8, v11
+; GFX13-NEXT: v_dual_lshrrev_b32 v130, 24, v14 :: v_dual_lshrrev_b32 v129, 16, v14
+; GFX13-NEXT: v_dual_lshrrev_b32 v128, 8, v14 :: v_dual_lshrrev_b32 v133, 16, v13
+; GFX13-NEXT: v_dual_lshrrev_b32 v131, 8, v13 :: v_dual_lshrrev_b32 v144, 24, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v135, 16, v16 :: v_dual_lshrrev_b32 v132, 8, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v145, 16, v15 :: v_dual_lshrrev_b32 v134, 8, v15
+; GFX13-NEXT: s_branch .LBB95_6
+; GFX13-NEXT: .LBB95_5:
+; GFX13-NEXT: v_dual_mov_b32 v35, s0 :: v_dual_mov_b32 v36, s1
+; GFX13-NEXT: v_readlane_b32 s0, v76, 0
+; GFX13-NEXT: v_dual_mov_b32 v15, s28 :: v_dual_mov_b32 v16, s29
+; GFX13-NEXT: v_dual_mov_b32 v13, s40 :: v_dual_mov_b32 v14, s41
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v63, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 1
+; GFX13-NEXT: v_dual_mov_b32 v11, s14 :: v_dual_mov_b32 v12, s15
+; GFX13-NEXT: v_dual_mov_b32 v9, s12 :: v_dual_mov_b32 v10, s13
+; GFX13-NEXT: v_mov_b32_e32 v73, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 2
+; GFX13-NEXT: v_dual_mov_b32 v7, s10 :: v_dual_mov_b32 v8, s11
+; GFX13-NEXT: v_dual_mov_b32 v5, s8 :: v_dual_mov_b32 v6, s9
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v61, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 3
+; GFX13-NEXT: v_dual_mov_b32 v3, s6 :: v_dual_mov_b32 v4, s7
+; GFX13-NEXT: v_dual_mov_b32 v1, s4 :: v_dual_mov_b32 v2, s5
+; GFX13-NEXT: v_mov_b32_e32 v62, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 4
+; GFX13-NEXT: v_dual_mov_b32 v33, s2 :: v_dual_mov_b32 v34, s3
+; GFX13-NEXT: v_dual_mov_b32 v29, s16 :: v_dual_mov_b32 v30, s17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v72, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 5
+; GFX13-NEXT: v_dual_mov_b32 v27, s18 :: v_dual_mov_b32 v28, s19
+; GFX13-NEXT: v_dual_mov_b32 v23, s20 :: v_dual_mov_b32 v24, s21
+; GFX13-NEXT: v_mov_b32_e32 v56, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 6
+; GFX13-NEXT: v_dual_mov_b32 v21, s22 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v19, s24 :: v_dual_mov_b32 v20, s25
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v60, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 7
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s27
+; GFX13-NEXT: v_dual_mov_b32 v134, s104 :: v_dual_mov_b32 v145, s102
+; GFX13-NEXT: v_mov_b32_e32 v57, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 8
+; GFX13-NEXT: v_dual_mov_b32 v132, s103 :: v_dual_mov_b32 v135, s101
+; GFX13-NEXT: v_dual_mov_b32 v144, s99 :: v_dual_mov_b32 v131, s98
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v58, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 9
+; GFX13-NEXT: v_dual_mov_b32 v133, s96 :: v_dual_mov_b32 v128, s97
+; GFX13-NEXT: v_dual_mov_b32 v129, s87 :: v_dual_mov_b32 v130, s86
+; GFX13-NEXT: v_mov_b32_e32 v59, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 10
+; GFX13-NEXT: v_dual_mov_b32 v116, s85 :: v_dual_mov_b32 v119, s83
+; GFX13-NEXT: v_dual_mov_b32 v114, s84 :: v_dual_mov_b32 v117, s82
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v45, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 11
+; GFX13-NEXT: v_dual_mov_b32 v118, s81 :: v_dual_mov_b32 v113, s80
+; GFX13-NEXT: v_dual_mov_b32 v115, s70 :: v_dual_mov_b32 v102, s71
+; GFX13-NEXT: v_mov_b32_e32 v47, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 12
+; GFX13-NEXT: v_dual_mov_b32 v103, s69 :: v_dual_mov_b32 v112, s68
+; GFX13-NEXT: v_dual_mov_b32 v98, s67 :: v_dual_mov_b32 v101, s65
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v40, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 13
+; GFX13-NEXT: v_dual_mov_b32 v96, s66 :: v_dual_mov_b32 v99, s64
+; GFX13-NEXT: v_dual_mov_b32 v100, s55 :: v_dual_mov_b32 v87, s54
+; GFX13-NEXT: v_mov_b32_e32 v44, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 14
+; GFX13-NEXT: v_dual_mov_b32 v97, s52 :: v_dual_mov_b32 v83, s53
+; GFX13-NEXT: v_dual_mov_b32 v85, s51 :: v_dual_mov_b32 v86, s50
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v46, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 15
+; GFX13-NEXT: v_dual_mov_b32 v82, s49 :: v_dual_mov_b32 v84, s39
+; GFX13-NEXT: v_dual_mov_b32 v55, s48 :: v_dual_mov_b32 v80, s38
+; GFX13-NEXT: v_mov_b32_e32 v182, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 16
+; GFX13-NEXT: v_dual_mov_b32 v81, s37 :: v_dual_mov_b32 v32, s36
+; GFX13-NEXT: v_dual_mov_b32 v71, s34 :: v_dual_mov_b32 v26, s35
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v43, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 17
+; GFX13-NEXT: v_dual_mov_b32 v39, s31 :: v_dual_mov_b32 v50, s30
+; GFX13-NEXT: v_dual_mov_b32 v51, s72 :: v_dual_mov_b32 v52, s62
+; GFX13-NEXT: v_mov_b32_e32 v183, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 18
+; GFX13-NEXT: v_dual_mov_b32 v53, s60 :: v_dual_mov_b32 v54, s58
+; GFX13-NEXT: v_dual_mov_b32 v64, s56 :: v_dual_mov_b32 v65, s46
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v41, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 19
+; GFX13-NEXT: v_dual_mov_b32 v69, s44 :: v_dual_mov_b32 v70, s42
+; GFX13-NEXT: v_dual_mov_b32 v25, s74 :: v_dual_mov_b32 v31, s76
+; GFX13-NEXT: v_mov_b32_e32 v42, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 20
+; GFX13-NEXT: v_dual_mov_b32 v37, s78 :: v_dual_mov_b32 v38, s88
+; GFX13-NEXT: v_dual_mov_b32 v48, s90 :: v_dual_mov_b32 v49, s92
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_mov_b32_e32 v177, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 21
+; GFX13-NEXT: v_dual_mov_b32 v66, s94 :: v_dual_mov_b32 v67, vcc_lo
+; GFX13-NEXT: v_mov_b32_e32 v181, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v167, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 23
+; GFX13-NEXT: v_mov_b32_e32 v179, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v180, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 25
+; GFX13-NEXT: v_mov_b32_e32 v176, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v178, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 27
+; GFX13-NEXT: v_mov_b32_e32 v164, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 28
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v165, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 29
+; GFX13-NEXT: v_mov_b32_e32 v166, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v151, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 31
+; GFX13-NEXT: v_mov_b32_e32 v163, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v149, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 1
+; GFX13-NEXT: v_mov_b32_e32 v161, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v162, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 3
+; GFX13-NEXT: v_mov_b32_e32 v150, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v160, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 5
+; GFX13-NEXT: v_mov_b32_e32 v146, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v147, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 7
+; GFX13-NEXT: v_mov_b32_e32 v148, s0
+; GFX13-NEXT: .LBB95_6: ; %end
+; GFX13-NEXT: v_perm_b32 v68, v73, v70, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v62, v72, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v69, v60, v69, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v35, v35, v63, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v36, v36, v61, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v68, 16, v68 :: v_dual_lshlrev_b32 v70, 16, v70
+; GFX13-NEXT: v_perm_b32 v58, v58, v59, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v56, v33, v56, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v65, v47, v65, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v64, v43, v64, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v57, v34, v57, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v58, 16, v58 :: v_dual_bitop2_b32 v33, v35, v68 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshlrev_b32_e32 v65, 16, v65
+; GFX13-NEXT: v_dual_lshlrev_b32 v64, 16, v64 :: v_dual_bitop2_b32 v35, v56, v69 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v29, v29, v45, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v68, v44, v46, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v34, v36, v70
+; GFX13-NEXT: v_perm_b32 v69, v41, v42, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v27, v182, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v36, v57, v58
+; GFX13-NEXT: v_perm_b32 v30, v30, v40, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v68, 16, v68
+; GFX13-NEXT: v_perm_b32 v182, v28, v183, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v54, v181, v54, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v27, v29, v65
+; GFX13-NEXT: v_or_b32_e32 v29, v70, v64
+; GFX13-NEXT: v_perm_b32 v64, v179, v180, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v53, v178, v53, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v28, v30, v68
+; GFX13-NEXT: v_or_b32_e32 v30, v182, v69
+; GFX13-NEXT: v_perm_b32 v23, v23, v177, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v54, 16, v54
+; GFX13-NEXT: v_perm_b32 v24, v24, v167, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v64, 16, v64
+; GFX13-NEXT: v_perm_b32 v21, v21, v176, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v53, 16, v53
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_store_b128 v0, v[33:36], off
+; GFX13-NEXT: scratch_store_b128 v0, v[27:30], off offset:16
+; GFX13-NEXT: v_perm_b32 v30, v160, v51, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v29, v21, v53
+; GFX13-NEXT: v_perm_b32 v21, v22, v164, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v22, v163, v52, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v28, v24, v64
+; GFX13-NEXT: v_perm_b32 v24, v161, v162, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v27, v23, v54
+; GFX13-NEXT: v_perm_b32 v23, v165, v166, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_perm_b32 v17, v17, v150, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_lshlrev_b32 v33, 16, v30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_bitop2_b32 v19, v19, v22 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v22, v147, v148, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v15, v15, v134, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v16, v16, v132, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v30, v21, v23
+; GFX13-NEXT: v_or_b32_e32 v21, v17, v33
+; GFX13-NEXT: v_perm_b32 v17, v18, v146, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v18, v145, v67, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v20, v20, v24
+; GFX13-NEXT: v_perm_b32 v23, v135, v144, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v133, v66, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v13, v13, v131, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v12, v12, v114, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v9, v113, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v11, v11, v116, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v16, v16, v23
+; GFX13-NEXT: v_perm_b32 v23, v117, v118, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v22, v17, v22
+; GFX13-NEXT: v_or_b32_e32 v17, v13, v24
+; GFX13-NEXT: v_perm_b32 v24, v115, v48, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v15, v15, v18
+; GFX13-NEXT: v_perm_b32 v18, v129, v130, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v14, v128, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v119, v49, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v7, v7, v98, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_bitop2_b32 v12, v12, v23 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v23, v99, v100, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v18, v13, v18
+; GFX13-NEXT: v_or_b32_e32 v13, v9, v24
+; GFX13-NEXT: v_perm_b32 v9, v10, v102, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v101, v38, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v97, v37, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v11, v11, v14
+; GFX13-NEXT: v_perm_b32 v14, v103, v112, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v8, v8, v96, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v5, v5, v87, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v6, v6, v83, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v23
+; GFX13-NEXT: v_perm_b32 v23, v80, v81, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v7, v7, v10
+; GFX13-NEXT: v_perm_b32 v10, v85, v86, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v14, v9, v14
+; GFX13-NEXT: v_or_b32_e32 v9, v5, v24
+; GFX13-NEXT: v_perm_b32 v5, v84, v31, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v71, v25, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v25, v39, v50, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v3, v3, v82, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v4, v4, v55, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v31, v1, v32, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v10, v6, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v26, v2, v26, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v23
+; GFX13-NEXT: v_or_b32_e32 v3, v31, v24
+; GFX13-NEXT: v_readlane_b32 s30, v75, 7
+; GFX13-NEXT: v_or_b32_e32 v4, v26, v25
+; GFX13-NEXT: s_clause 0x5
+; GFX13-NEXT: scratch_store_b128 v0, v[27:30], off offset:32
+; GFX13-NEXT: scratch_store_b128 v0, v[19:22], off offset:48
+; GFX13-NEXT: scratch_store_b128 v0, v[15:18], off offset:64
+; GFX13-NEXT: scratch_store_b128 v0, v[11:14], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[7:10], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off offset:112
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v73, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v72, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v63, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v62, off, s32 offset:12 nv
+; GFX13-NEXT: scratch_load_b32 v61, off, s32 offset:16 nv
+; GFX13-NEXT: scratch_load_b32 v60, off, s32 offset:20 nv
+; GFX13-NEXT: scratch_load_b32 v59, off, s32 offset:24 nv
+; GFX13-NEXT: scratch_load_b32 v58, off, s32 offset:28 nv
+; GFX13-NEXT: scratch_load_b32 v57, off, s32 offset:32 nv
+; GFX13-NEXT: scratch_load_b32 v56, off, s32 offset:36 nv
+; GFX13-NEXT: scratch_load_b32 v47, off, s32 offset:40 nv
+; GFX13-NEXT: scratch_load_b32 v46, off, s32 offset:44 nv
+; GFX13-NEXT: scratch_load_b32 v45, off, s32 offset:48 nv
+; GFX13-NEXT: scratch_load_b32 v44, off, s32 offset:52 nv
+; GFX13-NEXT: scratch_load_b32 v43, off, s32 offset:56 nv
+; GFX13-NEXT: scratch_load_b32 v42, off, s32 offset:60 nv
+; GFX13-NEXT: scratch_load_b32 v41, off, s32 offset:64 nv
+; GFX13-NEXT: scratch_load_b32 v40, off, s32 offset:68 nv
+; GFX13-NEXT: v_readlane_b32 s31, v75, 8
+; GFX13-NEXT: v_readlane_b32 s104, v75, 6
+; GFX13-NEXT: v_readlane_b32 s103, v75, 5
+; GFX13-NEXT: v_readlane_b32 s102, v75, 4
+; GFX13-NEXT: v_readlane_b32 s101, v75, 3
+; GFX13-NEXT: v_readlane_b32 s100, v75, 2
+; GFX13-NEXT: v_readlane_b32 s99, v75, 1
+; GFX13-NEXT: v_readlane_b32 s98, v75, 0
+; GFX13-NEXT: v_readlane_b32 s97, v74, 31
+; GFX13-NEXT: v_readlane_b32 s96, v74, 30
+; GFX13-NEXT: v_readlane_b32 s87, v74, 29
+; GFX13-NEXT: v_readlane_b32 s86, v74, 28
+; GFX13-NEXT: v_readlane_b32 s85, v74, 27
+; GFX13-NEXT: v_readlane_b32 s84, v74, 26
+; GFX13-NEXT: v_readlane_b32 s83, v74, 25
+; GFX13-NEXT: v_readlane_b32 s82, v74, 24
+; GFX13-NEXT: v_readlane_b32 s81, v74, 23
+; GFX13-NEXT: v_readlane_b32 s80, v74, 22
+; GFX13-NEXT: v_readlane_b32 s71, v74, 21
+; GFX13-NEXT: v_readlane_b32 s70, v74, 20
+; GFX13-NEXT: v_readlane_b32 s69, v74, 19
+; GFX13-NEXT: v_readlane_b32 s68, v74, 18
+; GFX13-NEXT: v_readlane_b32 s67, v74, 17
+; GFX13-NEXT: v_readlane_b32 s66, v74, 16
+; GFX13-NEXT: v_readlane_b32 s65, v74, 15
+; GFX13-NEXT: v_readlane_b32 s64, v74, 14
+; GFX13-NEXT: v_readlane_b32 s55, v74, 13
+; GFX13-NEXT: v_readlane_b32 s54, v74, 12
+; GFX13-NEXT: v_readlane_b32 s53, v74, 11
+; GFX13-NEXT: v_readlane_b32 s52, v74, 10
+; GFX13-NEXT: v_readlane_b32 s51, v74, 9
+; GFX13-NEXT: v_readlane_b32 s50, v74, 8
+; GFX13-NEXT: v_readlane_b32 s49, v74, 7
+; GFX13-NEXT: v_readlane_b32 s48, v74, 6
+; GFX13-NEXT: v_readlane_b32 s39, v74, 5
+; GFX13-NEXT: v_readlane_b32 s38, v74, 4
+; GFX13-NEXT: v_readlane_b32 s37, v74, 3
+; GFX13-NEXT: v_readlane_b32 s36, v74, 2
+; GFX13-NEXT: v_readlane_b32 s35, v74, 1
+; GFX13-NEXT: v_readlane_b32 s34, v74, 0
+; GFX13-NEXT: s_or_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v74, off, s32 offset:72 nv
+; GFX13-NEXT: scratch_load_b32 v75, off, s32 offset:76 nv
+; GFX13-NEXT: scratch_load_b32 v76, off, s32 offset:80 nv
+; GFX13-NEXT: scratch_load_b32 v77, off, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -192883,6 +224825,1554 @@ define <64 x i16> @bitcast_v128i8_to_v64i16(<128 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v64i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v78, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v79, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v88, s32 offset:392 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:384
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:380
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:376
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:372
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32 offset:368
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v37, off, s32 offset:364
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v70, off, s32 offset:360
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:356
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:352
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v35, off, s32 offset:348
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:344
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:340
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:336
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:332
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v69, off, s32 offset:328
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v36, off, s32 offset:324
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v67, off, s32 offset:320
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v68, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v34, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v33, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v32, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v64, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:232
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:196
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v55, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:388
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:16
+; GFX13-TRUE16-NEXT: s_clause 0x1a
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v53, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v54, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v66, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v71, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v50, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v51, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v78, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v79, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:68
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v48, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v76, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v77, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v49, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v74, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v75, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v38, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v39, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v183, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v43.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v72.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v73.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v47.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v59.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v162.l, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v164.l, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v62.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v63.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v176.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v179.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v182.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v42.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v41.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v46.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v58.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v61.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v163.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v166.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v178.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v181.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v177.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v180.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v40.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v45.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v57.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v60.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v44.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v56.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v165.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v167.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3e
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v69.l, 8, v69.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v70.l, 8, v70.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v69.h, 8, v69.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v67.h, 8, v67.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v68.h, 8, v68.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v68.l, 8, v68.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v67.l, 8, v67.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v65.l, 8, v65.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v64.h, 8, v64.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x21
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v55.h, 8, v55.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1d
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v88
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1c
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v52.h, 8, v52.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1b
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v53.l, 8, v53.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1a
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v52.l, 8, v53.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x19
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v54.l, 8, v54.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x18
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v54.h, 8, v54.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x17
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v53.h, 8, v55.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x16
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v65.h, 8, v64.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x15
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v55.l, 8, v66.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x14
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v64.l, 8, v66.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x13
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v66.l, 8, v71.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x12
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v66.h, 8, v71.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v71.l, 8, v70.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v71.h, 8, v31.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v70.h, 8, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB96_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v118, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v101, v99, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v129, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v45, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v116, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v56, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v61, v58, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v83, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v134, v130, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v181, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v63, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v17.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v100, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v119, v117, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v42, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v43, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v87, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v114, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v60, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v59, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v19.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v82, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v144, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v167, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v166, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v145, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v180, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v179, v176, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v21.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v86, v84, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v46, v41, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v73, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v113, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v164, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v75, v74, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v77, v76, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v79, v78, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v23.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v135, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v147, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v150, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v151, v149, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v161, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v8.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v39.h, v52.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v38.h, v53.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v39.l, v52.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v49.h, v54.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v48.l, v54.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v11.h, v48.h, v53.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.l, v51.l, v65.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v12.h, v49.l, v55.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v13.h, v50.l, v64.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.l, v51.h, v66.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v14.h, v50.h, v66.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v15.h, v32.l, v55.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.l, v33.l, v64.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v24.h, v32.h, v65.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v25.h, v33.h, v67.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.l, v35.l, v68.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v26.h, v34.h, v68.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v27.h, v34.l, v67.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.l, v36.h, v69.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v28.h, v36.l, v70.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v29.h, v35.h, v69.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.l, v38.l, v71.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v30.h, v37.h, v71.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v31.h, v37.l, v70.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr79_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr78_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_hi16
+; GFX13-TRUE16-NEXT: .LBB96_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB96_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v161.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v160.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v37.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v150.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v70.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v71.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v71.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v31.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v30.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v151.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v149.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v35.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v36.h, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v148.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v102.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v69.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v69.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v70.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v29.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v28.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v34.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v34.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v147.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v146.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.h, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v67.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v68.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v68.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v67.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v27.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v26.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v25.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v33.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v32.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v135.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v131.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v144.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v132.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v113.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v64.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v65.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v24.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v23.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v114.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v103.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v86.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v84.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v119.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v117.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v145.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v133.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v134.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v130.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v22.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v21.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v20.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v82.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v80.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v116.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v112.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v87.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v85.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v129.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v128.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v100.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v98.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v19.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v18.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v101.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v99.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v83.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v81.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v118.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v115.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v97.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v96.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v32.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v55.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v17.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v16.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v15.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x10
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v51.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v50.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xd
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v79.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v78.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v50.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v51.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v66.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v66.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v64.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v65.h, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v14.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v13.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v49.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v77.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.l, 8, v76.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v48.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v49.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v48.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v55.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.l, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v53.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v54.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v54.h, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v12.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v75.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v74.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v39.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v39.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v38.h, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v73.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v72.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v52.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v52.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v53.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v43.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v183.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v164.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v162.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v59.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v47.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v179.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v176.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v63.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v62.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v46.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v41.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v42.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v182.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v166.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v163.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v61.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v58.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v180.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v177.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v181.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v178.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v60.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v57.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v45.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v32.l, 8, v40.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v32.h, v167.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v33.l, 8, v165.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v33.h, v56.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v34.l, 8, v44.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v32.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v32.l, v33.l, v32.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v32.h, v34.l, v33.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v32.h
+; GFX13-TRUE16-NEXT: .LBB96_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: scratch_load_b32 v88, off, s32 offset:392 nv ; 4-byte Folded Reload
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xe
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v79, off, s32 offset:396 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v78, off, s32 offset:400 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:404 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:408 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-TRUE16-NEXT: s_clause 0x13 ; 80-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:412 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:416 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:420 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:424 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:428 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:432 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:436 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:440 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:444 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:448 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:452 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:456 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:460 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:464 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:468 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:472 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:476 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:480 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:484 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:488 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v64i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v77, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v78, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v79, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v88, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v89, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v90, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v91, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v92, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v93, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v94, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v95, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Spill
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v104, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v105, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v106, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v107, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v108, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v109, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v110, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v111, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v120, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v121, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v122, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v123, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v124, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v125, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v126, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v127, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v83, v24 :: v_dual_mov_b32 v68, v23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v69, v22 :: v_dual_mov_b32 v70, v21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, v20 :: v_dual_mov_b32 v51, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, v18 :: v_dual_mov_b32 v66, v17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v67, v16 :: v_dual_mov_b32 v50, v15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, v14 :: v_dual_mov_b32 v64, v13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v65, v12 :: v_dual_mov_b32 v32, v11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v10 :: v_dual_mov_b32 v53, v9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, v8 :: v_dual_mov_b32 v33, v7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v6 :: v_dual_mov_b32 v39, v5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v4 :: v_dual_mov_b32 v34, v3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v2 :: v_dual_mov_b32 v36, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v37, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v0, off, s32 offset:384
+; GFX13-FAKE16-NEXT: scratch_load_u16 v79, off, s32 offset:380
+; GFX13-FAKE16-NEXT: scratch_load_u16 v89, off, s32 offset:376
+; GFX13-FAKE16-NEXT: scratch_load_u16 v90, off, s32 offset:372
+; GFX13-FAKE16-NEXT: scratch_load_u16 v1, off, s32 offset:368
+; GFX13-FAKE16-NEXT: scratch_load_u16 v78, off, s32 offset:364
+; GFX13-FAKE16-NEXT: scratch_load_u16 v2, off, s32 offset:360
+; GFX13-FAKE16-NEXT: scratch_load_u16 v88, off, s32 offset:356
+; GFX13-FAKE16-NEXT: scratch_load_u16 v3, off, s32 offset:352
+; GFX13-FAKE16-NEXT: scratch_load_u16 v62, off, s32 offset:348
+; GFX13-FAKE16-NEXT: scratch_load_u16 v76, off, s32 offset:344
+; GFX13-FAKE16-NEXT: scratch_load_u16 v77, off, s32 offset:340
+; GFX13-FAKE16-NEXT: scratch_load_u16 v4, off, s32 offset:336
+; GFX13-FAKE16-NEXT: scratch_load_u16 v60, off, s32 offset:332
+; GFX13-FAKE16-NEXT: scratch_load_u16 v5, off, s32 offset:328
+; GFX13-FAKE16-NEXT: scratch_load_u16 v74, off, s32 offset:324
+; GFX13-FAKE16-NEXT: scratch_load_u16 v6, off, s32 offset:320
+; GFX13-FAKE16-NEXT: scratch_load_u16 v57, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v61, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v63, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v7, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v47, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v8, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v59, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v9, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v46, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v56, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v58, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v10, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v42, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v11, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v45, off, s32 offset:260
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v183, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v41, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v43, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v44, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v40, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:192
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:132
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v12, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_b32 v13, off, s32 offset:388
+; GFX13-FAKE16-NEXT: scratch_load_u16 v14, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v15, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v16, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v17, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v18, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v19, off, s32 offset:64
+; GFX13-FAKE16-NEXT: scratch_load_u16 v20, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v21, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v22, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v23, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v24, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:12
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v84, v30 :: v_dual_mov_b32 v85, v29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v86, v28 :: v_dual_mov_b32 v71, v27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v81, v26 :: v_dual_mov_b32 v82, v25
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3e
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v127, 8, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v126, 8, v1
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v125, 8, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v124, 8, v3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v123, 8, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v122, 8, v5
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v121, 8, v6
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v120, 8, v7
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v111, 8, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v110, 8, v9
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v108, 8, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v109, 8, v11
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v107, 8, v12
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1d
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v13
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1c
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v72, 8, v14
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1b
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v73, 8, v15
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1a
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v75, 8, v16
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x19
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v91, 8, v17
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x18
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v92, 8, v18
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x17
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v93, 8, v19
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x16
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v95, 8, v20
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x15
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v94, 8, v21
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x14
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v104, 8, v22
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v106, 8, v23
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x12
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v105, 8, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB96_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v35, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v38, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v65, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v52, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v67, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v55, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v80, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v69, v68, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v83, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v81, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v7, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v9, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v11, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v86, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v84, v96, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v113, v72, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v102, v73, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v133, v132, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v103, v75, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v145, v91, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v134, v92, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v150, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v135, v93, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v14, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v165, v95, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v148, v94, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v180, v176, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v15, v164, v104, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v181, v106, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v177, v105, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v119, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v112, v107, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v100, v98, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v97, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v13, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v15, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v17, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v19, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v116, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v101, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v130, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v117, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v146, v144, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v131, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v162, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v151, v149, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v178, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v163, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v40, v182, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v179, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v44, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v41, v183, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v26, v45, v109, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v27, v42, v108, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v58, v56, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v46, v110, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v59, v111, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v31, v47, v120, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v23, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v29, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v30, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v63, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v28, v57, v121, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v29, v74, v122, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v30, v60, v123, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v77, v76, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v32, v62, v124, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v88, v125, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v78, v126, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v90, v89, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v79, v127, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v32, v31, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v34, v33, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v36, v35, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr95
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr104
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr106
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr105
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr107
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr109
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr108
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr110
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr111
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr120
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr121
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr122
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr123
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr124
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr125
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr126
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr127
+; GFX13-FAKE16-NEXT: .LBB96_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB96_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v90, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v89
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v79, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v88, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v78, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v76
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v127, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v125, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v126, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v77, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v31, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v76, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v30, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v77, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v62, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v74, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v60, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v63, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v61
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v29, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v124, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v122, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v123, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v57, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v57, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v28, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v60, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v27, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v121, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v59, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v47, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v58, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v56
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v46, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v46, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v111, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v120, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v110, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v45, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v26, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v45, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v25, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v47, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v109, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v42, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v44, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v43
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v41, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v183
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v40, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v182
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v24, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v108, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v179, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v167
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v167, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v23, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v179, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v22, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v178, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v166
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v163, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v161
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v162, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v160
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v151, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v149
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v149, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v146, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v144
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v144, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v146, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v131, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v129
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v130, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v128
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v117, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v115
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v116, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v114
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v101, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v99
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v99, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v101, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v100, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v98
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v97, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v87
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v119, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v118
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v112, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v87, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v107, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v181, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v97, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v98, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v106, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v177, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0xd
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v180, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v176
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v164, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0xb
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v165, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v105, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v104, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v95, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v148, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v100, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v112, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v94, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v150, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v147
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v135, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v145, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v134, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v114, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v93, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v91, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v92, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v133, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v115, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v116, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v103, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v113, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v102, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v86, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v85
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v75, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v72, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v73, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v84, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v96
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v84, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v85, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v83, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v82
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v81, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v80, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v69, v69, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v68, 8, v68
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v70, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v67, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v66
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v68, v69, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v66, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v67, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v65, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v68, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v55, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v51, 8, v51
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v50, 8, v50
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v51, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v50, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v48, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v48, v49, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v38, v38, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v37, v37, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v36, 8, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v34, 8, v34
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v33, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v32, 8, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v39, v39, v48, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v36, v36, v37, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v34, v34, v35, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v33, v33, v38, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v32, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v32, 0x300, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v35, 0x300, v36
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v34, 0x300, v34
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v33, 0x300, v33
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v36, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v37, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v34, v35, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v33, v32, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v37, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v68, v67, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v70, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v85, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v84, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v116, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v115, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v114, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v112, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v100, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v98, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v97, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v87, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v101, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v99, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v146, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v144, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v149, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v179, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v167, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v47, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v45, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v46, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v60, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v57, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v30, v77, v30, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v31, v76, v31, 0x5040100
+; GFX13-FAKE16-NEXT: .LBB96_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_clause 0x1f ; 128-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v127, off, s32 offset:392 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v126, off, s32 offset:396 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v125, off, s32 offset:400 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v124, off, s32 offset:404 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v123, off, s32 offset:408 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v122, off, s32 offset:412 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v121, off, s32 offset:416 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v120, off, s32 offset:420 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v111, off, s32 offset:424 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v110, off, s32 offset:428 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v109, off, s32 offset:432 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v108, off, s32 offset:436 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v107, off, s32 offset:440 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v106, off, s32 offset:444 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v105, off, s32 offset:448 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v104, off, s32 offset:452 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v95, off, s32 offset:456 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v94, off, s32 offset:460 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v93, off, s32 offset:464 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v92, off, s32 offset:468 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v91, off, s32 offset:472 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v90, off, s32 offset:476 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v89, off, s32 offset:480 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v88, off, s32 offset:484 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v79, off, s32 offset:488 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v78, off, s32 offset:492 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v77, off, s32 offset:496 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:500 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:504 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:508 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:512 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:516 nv
+; GFX13-FAKE16-NEXT: s_clause 0xf ; 64-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:520 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:524 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:528 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:532 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:536 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:540 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:544 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:548 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:552 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:556 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:560 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:564 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:568 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:572 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:576 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:580 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -197402,6 +230892,1126 @@ define inreg <64 x i16> @bitcast_v128i8_to_v64i16_scalar(<128 x i8> inreg %a, i3
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:320 ; 4-byte Folded Reload
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v128i8_to_v64i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v133, off, s32 offset:312
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v166, off, s32 offset:308
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v161, off, s32 offset:304
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v180, off, s32 offset:300
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v129, off, s32 offset:296
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v165, off, s32 offset:292
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v178, off, s32 offset:288
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v182, off, s32 offset:284
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v102, off, s32 offset:280
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v160, off, s32 offset:276
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v163, off, s32 offset:272
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v181, off, s32 offset:268
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v132, off, s32 offset:264
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v162, off, s32 offset:260
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v150, off, s32 offset:256
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v179, off, s32 offset:252
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v101, off, s32 offset:248
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v149, off, s32 offset:244
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v146, off, s32 offset:240
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v177, off, s32 offset:236
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v87, off, s32 offset:232
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v144, off, s32 offset:228
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v128, off, s32 offset:224
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v167, off, s32 offset:220
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v82, off, s32 offset:216
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v131, off, s32 offset:212
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v148, off, s32 offset:208
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v176, off, s32 offset:204
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v64, off, s32 offset:200
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v117, off, s32 offset:196
+; GFX13-TRUE16-NEXT: s_clause 0x1f
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v119, off, s32 offset:192
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v164, off, s32 offset:188
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v85, off, s32 offset:184
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v118, off, s32 offset:180
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v115, off, s32 offset:176
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v151, off, s32 offset:172
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v55, off, s32 offset:168
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v113, off, s32 offset:164
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v100, off, s32 offset:160
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v147, off, s32 offset:156
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v52, off, s32 offset:152
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v98, off, s32 offset:148
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v81, off, s32 offset:144
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v135, off, s32 offset:140
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v49, off, s32 offset:136
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v84, off, s32 offset:132
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v112, off, s32 offset:128
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v145, off, s32 offset:124
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:120
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:116
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v80, off, s32 offset:112
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v130, off, s32 offset:108
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v51, off, s32 offset:104
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v71, off, s32 offset:100
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v67, off, s32 offset:96
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v116, off, s32 offset:92
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:88
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v66, off, s32 offset:84
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v54, off, s32 offset:80
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v103, off, s32 offset:76
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:72
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v53, off, s32 offset:68
+; GFX13-TRUE16-NEXT: s_clause 0x11
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v48, off, s32 offset:64
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v97, off, s32 offset:60
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:56
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v50, off, s32 offset:52
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v65, off, s32 offset:48
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v99, off, s32 offset:44
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:40
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v83, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v70, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v114, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v96, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v134, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v86, off, s32
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v30
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v29
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v28
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v27
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v26
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v25
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v24
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v23
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, 0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-TRUE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB97_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, 0xc0c0004 :: v_dual_lshlrev_b32 v13, 8, v86
+; GFX13-TRUE16-NEXT: s_and_b32 s76, s43, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s77, s11, 8
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 8, v37
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s2, s3, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s26, s27, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s18, s19, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s9, s4, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s40, s8, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s14, s7, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s12, s6, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s76
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s61, s45, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s60, s15, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s72, s58, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s59, s44, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v68
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s41, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s89, s10, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s73, s42, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s88, s88, s89
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s88 :: v_dual_bitop2_b32 v10, v10, v12 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v14, 0xff, v114
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s74, 0xff
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v15, 8, v70 :: v_dual_bitop2_b32 v12, s88, v13 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v38
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v13, 8, v32 :: v_dual_bitop2_b32 v8, v14, v15 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v14, 0xff, v83
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v15, 0xff, v50
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v16, 8, v33 :: v_dual_lshlrev_b32 v17, 8, v39
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v24, 8, v64 :: v_dual_bitop2_b32 v10, v10, v13 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v134, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v8.l
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v25, 8, v119 :: v_dual_bitop2_b32 v8, v15, v16 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 8, v82 :: v_dual_bitop2_b32 v14, v14, v17 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v53, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v99, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v66, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v97, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v71, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v103, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v69, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v116, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v84, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v130, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v98, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v145, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v10.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v113, v55, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v135, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v8.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v147, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v118, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v117
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v151, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v26, 0xff, v131
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v164
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v10, v10, v24
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v28, 0xff, v149
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v29, 8, v101
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v30, 0xff, v160
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v24, v8, v25
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v8, v26, v27
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v26, 8, v87
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v144
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v176, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v167
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v27, 8, v128 :: v_dual_bitop2_b32 v10, v10, v26 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 8, v102
+; GFX13-TRUE16-NEXT: s_and_b32 s77, s63, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s76, s57, 8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v26, v8, v27
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v28, 8, v132 :: v_dual_bitop2_b32 v8, v28, v29 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v10, 0xff, v162
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v177, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v8.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v179
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v29, 8, v150 :: v_dual_bitop2_b32 v10, v10, v28 bitop3:0x54
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s56, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s79, s5, 8
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v30, v31
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v28, v8, v29
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v29, 0xff, v166
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v31, 8, v133
+; GFX13-TRUE16-NEXT: s_or_b32 s76, s77, s76
+; GFX13-TRUE16-NEXT: s_or_b32 s77, s78, s79
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s62, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s79, s47, 8
+; GFX13-TRUE16-NEXT: s_and_b32 s88, s46, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s89, s13, 8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v10.l
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v8, 0xff, v165
+; GFX13-TRUE16-NEXT: v_lshlrev_b32_e32 v10, 8, v129
+; GFX13-TRUE16-NEXT: s_or_b32 s78, s78, s79
+; GFX13-TRUE16-NEXT: s_or_b32 s79, s88, s89
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s76, s76, s77
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s77, s78, s79
+; GFX13-TRUE16-NEXT: v_and_b32_e32 v40, 0xff, v182
+; GFX13-TRUE16-NEXT: v_dual_lshlrev_b32 v31, 8, v178 :: v_dual_bitop2_b32 v41, v29, v31 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s76 :: v_dual_bitop2_b32 v183, v8, v10 bitop3:0x54
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v181, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_or_b32_e32 v30, v40, v31
+; GFX13-TRUE16-NEXT: v_perm_b32 v31, v180, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s77
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v30.h, v183.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v31.h, v41.l
+; GFX13-TRUE16-NEXT: s_branch .LBB97_3
+; GFX13-TRUE16-NEXT: .LBB97_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s75, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-TRUE16-NEXT: .LBB97_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB97_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v0, 3, v180 :: v_dual_add_nc_u32 v1, 3, v166
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v182 :: v_dual_add_nc_u32 v3, 3, v165
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v181
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v161, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s59, s59, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v133, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v160
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v179 :: v_dual_add_nc_u32 v4, 3, v162
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v129, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v1, v102, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v150, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v132, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v177
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v102, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v149
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v132, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v167
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v144
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v176
+; GFX13-TRUE16-NEXT: s_add_co_i32 s73, s73, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v128, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v101, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v131
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v164
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v87, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v117
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v151 :: v_dual_add_nc_u32 v4, 3, v118
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v82, 0x300, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v147
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v64, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v113
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v85, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v135 :: v_dual_add_nc_u32 v3, 3, v98
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v55, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v145
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v81, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v55, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v84
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v130
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v52, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v69
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v116 :: v_dual_add_nc_u32 v4, 3, v71
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v49, 0x300, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v1
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v103
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v66
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v51, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v97 :: v_dual_add_nc_u32 v4, 3, v99
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v0, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v53
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 3, v114
+; GFX13-TRUE16-NEXT: s_add_co_i32 s72, s72, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 3, v83
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v50
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 3, v38
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v134
+; GFX13-TRUE16-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v3, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 3, v68
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v2, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s74, v86, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s62, s47, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v3, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v38, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s73, s42, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s56, s5, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v37, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s59, s44, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s43, s11, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s61, s61, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s72, s58, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s41, s10, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s46, s13, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v50, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v53, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s12, s6, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s60, s15, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s61, s45, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s63, s63, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v65, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s28, s29, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v39, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s63, s57, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v48, 0x300, v5
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s9, s4, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s20, s21, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s14, s7, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v54, s40, s8, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v67, s26, s27, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v68, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s22, s23, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v69, s2, s3, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v70, s18, s19, v1
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v66, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v71, s16, s17, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v80, s0, s1, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v54, 0x300, v54
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v67, 0x300, v67
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v69, 0x300, v69
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v70, 0x300, v70
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v81, 0x300, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v71
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v80
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v85.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v87.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v101.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v28.h, v132.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v102.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v30.h, v129.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e64 v31.h, v133.l
+; GFX13-TRUE16-NEXT: .LBB97_5: ; %end
+; GFX13-TRUE16-NEXT: s_clause 0x1 ; 8-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:320 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:324 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v128i8_to_v64i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:320 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_u16 v166, off, s32 offset:312
+; GFX13-FAKE16-NEXT: scratch_load_u16 v180, off, s32 offset:308
+; GFX13-FAKE16-NEXT: scratch_load_u16 v167, off, s32 offset:304
+; GFX13-FAKE16-NEXT: scratch_load_u16 v182, off, s32 offset:300
+; GFX13-FAKE16-NEXT: scratch_load_u16 v150, off, s32 offset:296
+; GFX13-FAKE16-NEXT: scratch_load_u16 v178, off, s32 offset:292
+; GFX13-FAKE16-NEXT: scratch_load_u16 v165, off, s32 offset:288
+; GFX13-FAKE16-NEXT: scratch_load_u16 v181, off, s32 offset:284
+; GFX13-FAKE16-NEXT: scratch_load_u16 v161, off, s32 offset:280
+; GFX13-FAKE16-NEXT: scratch_load_u16 v176, off, s32 offset:276
+; GFX13-FAKE16-NEXT: scratch_load_u16 v163, off, s32 offset:272
+; GFX13-FAKE16-NEXT: scratch_load_u16 v179, off, s32 offset:268
+; GFX13-FAKE16-NEXT: scratch_load_u16 v135, off, s32 offset:264
+; GFX13-FAKE16-NEXT: scratch_load_u16 v151, off, s32 offset:260
+; GFX13-FAKE16-NEXT: scratch_load_u16 v164, off, s32 offset:256
+; GFX13-FAKE16-NEXT: scratch_load_u16 v177, off, s32 offset:252
+; GFX13-FAKE16-NEXT: scratch_load_u16 v133, off, s32 offset:248
+; GFX13-FAKE16-NEXT: scratch_load_u16 v149, off, s32 offset:244
+; GFX13-FAKE16-NEXT: scratch_load_u16 v145, off, s32 offset:240
+; GFX13-FAKE16-NEXT: scratch_load_u16 v162, off, s32 offset:236
+; GFX13-FAKE16-NEXT: scratch_load_u16 v144, off, s32 offset:232
+; GFX13-FAKE16-NEXT: scratch_load_u16 v148, off, s32 offset:228
+; GFX13-FAKE16-NEXT: scratch_load_u16 v147, off, s32 offset:224
+; GFX13-FAKE16-NEXT: scratch_load_u16 v160, off, s32 offset:220
+; GFX13-FAKE16-NEXT: scratch_load_u16 v114, off, s32 offset:216
+; GFX13-FAKE16-NEXT: scratch_load_u16 v131, off, s32 offset:212
+; GFX13-FAKE16-NEXT: scratch_load_u16 v128, off, s32 offset:208
+; GFX13-FAKE16-NEXT: scratch_load_u16 v146, off, s32 offset:204
+; GFX13-FAKE16-NEXT: scratch_load_u16 v117, off, s32 offset:200
+; GFX13-FAKE16-NEXT: scratch_load_u16 v130, off, s32 offset:196
+; GFX13-FAKE16-NEXT: scratch_load_u16 v119, off, s32 offset:192
+; GFX13-FAKE16-NEXT: s_clause 0x1f
+; GFX13-FAKE16-NEXT: scratch_load_u16 v134, off, s32 offset:188
+; GFX13-FAKE16-NEXT: scratch_load_u16 v99, off, s32 offset:184
+; GFX13-FAKE16-NEXT: scratch_load_u16 v115, off, s32 offset:180
+; GFX13-FAKE16-NEXT: scratch_load_u16 v129, off, s32 offset:176
+; GFX13-FAKE16-NEXT: scratch_load_u16 v132, off, s32 offset:172
+; GFX13-FAKE16-NEXT: scratch_load_u16 v97, off, s32 offset:168
+; GFX13-FAKE16-NEXT: scratch_load_u16 v113, off, s32 offset:164
+; GFX13-FAKE16-NEXT: scratch_load_u16 v101, off, s32 offset:160
+; GFX13-FAKE16-NEXT: scratch_load_u16 v118, off, s32 offset:156
+; GFX13-FAKE16-NEXT: scratch_load_u16 v100, off, s32 offset:152
+; GFX13-FAKE16-NEXT: scratch_load_u16 v112, off, s32 offset:148
+; GFX13-FAKE16-NEXT: scratch_load_u16 v103, off, s32 offset:144
+; GFX13-FAKE16-NEXT: scratch_load_u16 v116, off, s32 offset:140
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:136
+; GFX13-FAKE16-NEXT: scratch_load_u16 v87, off, s32 offset:132
+; GFX13-FAKE16-NEXT: scratch_load_u16 v84, off, s32 offset:128
+; GFX13-FAKE16-NEXT: scratch_load_u16 v102, off, s32 offset:124
+; GFX13-FAKE16-NEXT: scratch_load_u16 v81, off, s32 offset:120
+; GFX13-FAKE16-NEXT: scratch_load_u16 v86, off, s32 offset:116
+; GFX13-FAKE16-NEXT: scratch_load_u16 v83, off, s32 offset:112
+; GFX13-FAKE16-NEXT: scratch_load_u16 v98, off, s32 offset:108
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:104
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:100
+; GFX13-FAKE16-NEXT: scratch_load_u16 v85, off, s32 offset:96
+; GFX13-FAKE16-NEXT: scratch_load_u16 v96, off, s32 offset:92
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:88
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:84
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:80
+; GFX13-FAKE16-NEXT: scratch_load_u16 v82, off, s32 offset:76
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:72
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:68
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:64
+; GFX13-FAKE16-NEXT: s_clause 0x10
+; GFX13-FAKE16-NEXT: scratch_load_u16 v80, off, s32 offset:60
+; GFX13-FAKE16-NEXT: scratch_load_u16 v34, off, s32 offset:56
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:52
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32 offset:48
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:44
+; GFX13-FAKE16-NEXT: scratch_load_u16 v36, off, s32 offset:40
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v37, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32 offset:316
+; GFX13-FAKE16-NEXT: scratch_load_u16 v32, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v48, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v38, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v35, off, s32
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v30
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v29
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v28
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v27
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v26
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v25
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v24
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v23
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, 0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v31
+; GFX13-FAKE16-NEXT: s_and_b32 s76, vcc_lo, exec_lo
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB97_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s74, 0xff
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xff, v48
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v14, 8, v32
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v67, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s20, s21, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s24, s25, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s28, s29, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s11, s8, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s6, s4, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s7, s5, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v80, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v68, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v69, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v11
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v35
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s26, s27, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s42, s15, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s44, s41, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 8, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s12, s9, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v116, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_lshl_b32 s77, s43, 8
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v118, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s14, s10, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, s76, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xff, v38
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 8, v117
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s46, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v11, v12
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v13, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xff, v53
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v15, 8, v37
+; GFX13-FAKE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v11, 16, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v14, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xff, v50
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v15, 8, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v9, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xff, v49
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v10, 8, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v15, v14, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v82, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v115, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v9, v9, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xff, v130
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v14
+; GFX13-FAKE16-NEXT: s_lshl_b32 s77, s47, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v9, 16, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v96, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v98, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v19
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v86, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v15, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v71, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s40, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s79, s13, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s88, s61, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v102, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s60, s57, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v19, 16, v11
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v87, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v27, 8, v144
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v29, 8, v135
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s73, s72, v8
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v31, 8, v150
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v112, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, s76, 16, v10
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v132, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s76, s58, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v11, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v113, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_or_b32 s76, s76, s77
+; GFX13-FAKE16-NEXT: s_or_b32 s77, s78, s79
+; GFX13-FAKE16-NEXT: s_lshl_b32 s78, s59, 8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v11, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v23, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v134
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v119
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s76, s76, s77
+; GFX13-FAKE16-NEXT: s_and_b32 s77, s62, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s79, s45, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s77, s77, s78
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v24, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xff, v131
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v25, 8, v114
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s56, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_or_b32 s78, s78, s79
+; GFX13-FAKE16-NEXT: s_and_b32 s79, s63, 0xff
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v25, v24, v25
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v146, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s77, s77, s78
+; GFX13-FAKE16-NEXT: s_or_b32 s78, s79, s88
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v160
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v147
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v25, 16, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xff, v148
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v26, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xff, v149
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v27, 8, v133
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v27, v26, v27
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v162, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v177
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v164
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v27, 16, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xff, v151
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v11, v28, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xff, v176
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v29, 8, v161
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v29, v28, v29
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v179, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xff, v181
+; GFX13-FAKE16-NEXT: v_lshlrev_b32_e32 v11, 8, v165
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v29, 16, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xff, v178
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v10, v10, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xff, v180
+; GFX13-FAKE16-NEXT: v_dual_lshlrev_b32 v31, 8, v166 :: v_dual_bitop2_b32 v30, v30, v31 bitop3:0x54
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_or_b32_e32 v31, v11, v31
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v182, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v40, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, s78, 16, v8
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, s76
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v183, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v10, s77
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v31, 16, v40
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v30, 16, v183
+; GFX13-FAKE16-NEXT: s_branch .LBB97_3
+; GFX13-FAKE16-NEXT: .LBB97_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s75, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31
+; GFX13-FAKE16-NEXT: .LBB97_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s75, s75, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s75, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s75, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB97_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v0, 3, v182 :: v_dual_add_nc_u32 v1, 3, v180
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v181 :: v_dual_add_nc_u32 v3, 3, v178
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v4, 3, v179 :: v_dual_add_nc_u32 v5, 3, v176
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v165, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s74, s74, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s62, s62, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v27, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v31, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v177
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v4, v163, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v5, v161, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v28, 0x300, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v30, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v151
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v164, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v150, 0x300, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v149 :: v_dual_add_nc_u32 v4, 3, v148
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v151, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v162
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v29, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v160
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v133, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v144, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v132
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v144, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 3, v134
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v135, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v146
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v26, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v131
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v119, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s73, s73, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v114, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v22, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v130
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v23, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v129, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v25, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v115
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v24, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v115, 0x300, v0
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v0, 3, v118 :: v_dual_add_nc_u32 v2, 3, v113
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v112
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v114, 0x300, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v101, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v116
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v97, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v99, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v102
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v100, 0x300, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v98 :: v_dual_add_nc_u32 v4, 3, v96
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v21, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v87
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v103, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v83, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s63, s63, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v85, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v86
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v71
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v71, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v82
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 3, v69
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v68
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v70, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v80
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v52, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v4, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v54, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v65
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v55, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v50 :: v_dual_add_nc_u32 v2, 3, v53
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 3, v67
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 3, v49
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v4, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 3, v48
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v36, 0x300, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v2
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v34, 0x300, v3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s74, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v0, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s73, s72, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s60, s60, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v35, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s62, s59, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v32, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s63, s61, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s58, s58, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s40, s13, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v33, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v39, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s12, s9, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s56, s45, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s60, s57, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s46, s43, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s58, s47, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s11, s8, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v50, s24, s25, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v65, s0, s1, v2
+; GFX13-FAKE16-NEXT: s_add_co_i32 s44, s44, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v37, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v38, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s44, s41, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s14, s10, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s42, s15, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v51, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v50, 0x300, v50
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s26, s27, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v67, s2, s3, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v65, 0x300, v65
+; GFX13-FAKE16-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v48, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v49, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s7, s5, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s28, s29, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v64, s16, s17, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v67, 0x300, v67
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v65
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v69, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v38
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s6, s4, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v53, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s20, s21, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v66, s18, s19, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v64, 0x300, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v67, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v69, 16, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v39, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v37, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v35, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v32, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v34, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v71
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v17
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s22, s23, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v66, 0x300, v66
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v68, 0x300, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v55, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v52, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v20, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v21, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v99
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v115
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v66, 16, v64
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v68
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v53, 16, v51
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v100, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v97, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v25, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v26, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v135
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v151
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v6, 16, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v49, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v10, 16, v50
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v11, 16, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v15, 16, v37
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v16, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v70, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v114, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v144, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v133, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v150, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v30, v30, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v31, v31, 16, v35
+; GFX13-FAKE16-NEXT: .LBB97_5: ; %end
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:320 nv ; 4-byte Folded Reload
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -202390,6 +237000,892 @@ define <128 x i8> @bitcast_v64i16_to_v128i8(<64 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:92
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v64i16_to_v128i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x18
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v40, s32 offset:96 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v41, s32 offset:92 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v42, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v43, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v44, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v45, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v46, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v47, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v56, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v57, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v58, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v59, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v60, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v61, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v62, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v63, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v72, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v73, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v74, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v75, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v76, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_store_b32 off, v77, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: ; meta instruction
+; GFX13-TRUE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr46_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr45_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr43_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr41_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr40_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr182_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr179_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr178_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr176_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr166_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr163_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr161_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr151_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr149_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr148_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr146_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr135_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr134_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr132_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr131_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr119_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr117_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr115_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr113_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr103_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr101_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr99_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr98_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr97_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr96_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr87_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr86_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr85_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr77_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr76_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr75_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr74_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr73_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr72_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr63_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr62_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr61_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr60_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr59_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr58_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr57_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr56_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr47_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr44_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr42_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr183_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr181_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr180_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr177_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr167_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr165_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr164_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr162_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr160_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr150_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr147_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr145_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr144_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr133_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr130_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr129_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr128_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr118_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr116_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr114_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr112_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr102_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr100_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[1:2]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 24, v16 :: v_dual_lshrrev_b32 v71, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v16 :: v_dual_lshrrev_b32 v81, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 8, v15 :: v_dual_lshrrev_b32 v83, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v14 :: v_dual_lshrrev_b32 v85, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 16, v13 :: v_dual_lshrrev_b32 v87, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 24, v12 :: v_dual_lshrrev_b32 v97, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v12 :: v_dual_lshrrev_b32 v99, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v101, 8, v11 :: v_dual_lshrrev_b32 v103, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v113, 16, v10 :: v_dual_lshrrev_b32 v115, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v117, 16, v9 :: v_dual_lshrrev_b32 v119, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v131, 24, v8 :: v_dual_lshrrev_b32 v132, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v8 :: v_dual_lshrrev_b32 v135, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 8, v7 :: v_dual_lshrrev_b32 v148, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v149, 16, v6 :: v_dual_lshrrev_b32 v151, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v161, 16, v5 :: v_dual_lshrrev_b32 v163, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v4 :: v_dual_lshrrev_b32 v176, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v4 :: v_dual_lshrrev_b32 v179, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 8, v3 :: v_dual_lshrrev_b32 v40, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v41, 16, v2 :: v_dual_lshrrev_b32 v43, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v45, 16, v1 :: v_dual_lshrrev_b32 v46, 8, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 24, v32 :: v_dual_lshrrev_b32 v102, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 8, v32 :: v_dual_lshrrev_b32 v114, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v31 :: v_dual_lshrrev_b32 v118, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v30 :: v_dual_lshrrev_b32 v129, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 16, v29 :: v_dual_lshrrev_b32 v133, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 24, v28 :: v_dual_lshrrev_b32 v145, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v147, 8, v28 :: v_dual_lshrrev_b32 v150, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v27 :: v_dual_lshrrev_b32 v162, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v26 :: v_dual_lshrrev_b32 v165, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v167, 16, v25 :: v_dual_lshrrev_b32 v177, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 24, v24 :: v_dual_lshrrev_b32 v181, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v183, 8, v24 :: v_dual_lshrrev_b32 v42, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v23 :: v_dual_lshrrev_b32 v47, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v22 :: v_dual_lshrrev_b32 v57, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 16, v21 :: v_dual_lshrrev_b32 v59, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 24, v20 :: v_dual_lshrrev_b32 v61, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v20 :: v_dual_lshrrev_b32 v63, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 8, v19 :: v_dual_lshrrev_b32 v73, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v18 :: v_dual_lshrrev_b32 v75, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v76, 16, v17 :: v_dual_lshrrev_b32 v77, 8, v17
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[68:69], 24, v[17:18]
+; GFX13-TRUE16-NEXT: .LBB98_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB98_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v32, v32, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[51:52], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[15:16]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[31:32]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[29:30]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[25:26]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[23:24]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[68:69], 24, v[17:18]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 24, v16 :: v_dual_lshrrev_b32 v71, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 8, v16 :: v_dual_lshrrev_b32 v81, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 8, v15 :: v_dual_lshrrev_b32 v83, 24, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v14 :: v_dual_lshrrev_b32 v85, 8, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v86, 16, v13 :: v_dual_lshrrev_b32 v87, 8, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v96, 24, v12 :: v_dual_lshrrev_b32 v97, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v98, 8, v12 :: v_dual_lshrrev_b32 v99, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v101, 8, v11 :: v_dual_lshrrev_b32 v103, 24, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v113, 16, v10 :: v_dual_lshrrev_b32 v115, 8, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v117, 16, v9 :: v_dual_lshrrev_b32 v119, 8, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v131, 24, v8 :: v_dual_lshrrev_b32 v132, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v134, 8, v8 :: v_dual_lshrrev_b32 v135, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v146, 8, v7 :: v_dual_lshrrev_b32 v148, 24, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v149, 16, v6 :: v_dual_lshrrev_b32 v151, 8, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v161, 16, v5 :: v_dual_lshrrev_b32 v163, 8, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v166, 24, v4 :: v_dual_lshrrev_b32 v176, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v178, 8, v4 :: v_dual_lshrrev_b32 v179, 16, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v182, 8, v3 :: v_dual_lshrrev_b32 v40, 24, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v41, 16, v2 :: v_dual_lshrrev_b32 v43, 8, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v45, 16, v1 :: v_dual_lshrrev_b32 v46, 8, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v100, 24, v32 :: v_dual_lshrrev_b32 v102, 16, v32
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v112, 8, v32 :: v_dual_lshrrev_b32 v114, 16, v31
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v116, 8, v31 :: v_dual_lshrrev_b32 v118, 24, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v128, 16, v30 :: v_dual_lshrrev_b32 v129, 8, v30
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v130, 16, v29 :: v_dual_lshrrev_b32 v133, 8, v29
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v144, 24, v28 :: v_dual_lshrrev_b32 v145, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v147, 8, v28 :: v_dual_lshrrev_b32 v150, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v160, 8, v27 :: v_dual_lshrrev_b32 v162, 24, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v164, 16, v26 :: v_dual_lshrrev_b32 v165, 8, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v167, 16, v25 :: v_dual_lshrrev_b32 v177, 8, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v180, 24, v24 :: v_dual_lshrrev_b32 v181, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v183, 8, v24 :: v_dual_lshrrev_b32 v42, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v44, 8, v23 :: v_dual_lshrrev_b32 v47, 24, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v56, 16, v22 :: v_dual_lshrrev_b32 v57, 8, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v58, 16, v21 :: v_dual_lshrrev_b32 v59, 8, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v60, 24, v20 :: v_dual_lshrrev_b32 v61, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v62, 8, v20 :: v_dual_lshrrev_b32 v63, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v72, 8, v19 :: v_dual_lshrrev_b32 v73, 24, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v74, 16, v18 :: v_dual_lshrrev_b32 v75, 8, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v76, 16, v17 :: v_dual_lshrrev_b32 v77, 8, v17
+; GFX13-TRUE16-NEXT: .LBB98_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v45, v67, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v46, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v43, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v41, v40, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v182, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v179, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v35, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v178, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v39, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v176, v166, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v50, 16, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v163, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v161, v65, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v151, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v149, v148, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v146, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v55, v135, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v134, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v64, v132, v131, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v35, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v39, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v50, 16, v6
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v119, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v35, v117, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v115, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v39, v113, v103, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v11, v101, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v50, v99, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v12, v98, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v51, v97, v96, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v55, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v64, 16, v8
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v35, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v39, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v50, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v51, 16, v12
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v13, v87, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v86, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v85, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v84, v83, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v15, v82, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v81, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v16, v80, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v17, v77, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v76, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v18, v75, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v74, v73, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v19, v72, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v63, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v20, v62, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v61, v60, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v21, v59, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v58, v53, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v22, v57, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v56, v47, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v23, v44, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v42, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, v24, v183, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, v181, v180, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, v25, v177, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v167, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v26, v165, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v164, v162, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v27, v160, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v150, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-TRUE16-NEXT: v_perm_b32 v20, v28, v147, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v21, v145, v144, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-TRUE16-NEXT: v_perm_b32 v22, v29, v133, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v23, v130, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v24, v30, v129, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v25, v128, v118, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v26, v31, v116, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v27, v114, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v28, v32, v112, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v29, v102, v100, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-TRUE16-NEXT: s_clause 0x5
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-TRUE16-NEXT: s_clause 0x15 ; 88-byte Folded Reload
+; GFX13-TRUE16-NEXT: scratch_load_b32 v77, off, s32 offset:12 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v76, off, s32 offset:16 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v75, off, s32 offset:20 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v74, off, s32 offset:24 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v73, off, s32 offset:28 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v72, off, s32 offset:32 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v63, off, s32 offset:36 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v62, off, s32 offset:40 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v61, off, s32 offset:44 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v60, off, s32 offset:48 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v59, off, s32 offset:52 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v58, off, s32 offset:56 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v57, off, s32 offset:60 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v56, off, s32 offset:64 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v47, off, s32 offset:68 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v46, off, s32 offset:72 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v45, off, s32 offset:76 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v44, off, s32 offset:80 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v43, off, s32 offset:84 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v42, off, s32 offset:88 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v41, off, s32 offset:92 nv
+; GFX13-TRUE16-NEXT: scratch_load_b32 v40, off, s32 offset:96 nv
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v64i16_to_v128i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_clause 0x17
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v40, s32 offset:92 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v41, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v42, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v43, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v44, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v45, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v46, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v47, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v56, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v57, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v58, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v59, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v60, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v61, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v62, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v63, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v72, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v73, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v74, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v75, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_store_b32 off, v76, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: ; meta instruction
+; GFX13-FAKE16-NEXT: scratch_load_b32 v33, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr162
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr161
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr151
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr149
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr147
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr145
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr134
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr133
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr132
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr131
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr130
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr129
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr128
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr119
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr118
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr117
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr116
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr115
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr114
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr113
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr112
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr103
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr102
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr101
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr99
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr98
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr97
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr96
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr87
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr86
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr85
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr84
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr183
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr182
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr181
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr180
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr179
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr178
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr177
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr176
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr167
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr166
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr165
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr164
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr163
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr160
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr150
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr148
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr146
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr144
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr135
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x2
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 24, v16 :: v_dual_lshrrev_b32 v70, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 8, v16 :: v_dual_lshrrev_b32 v80, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 8, v15 :: v_dual_lshrrev_b32 v82, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v14 :: v_dual_lshrrev_b32 v84, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v85, 16, v13 :: v_dual_lshrrev_b32 v86, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v87, 24, v12 :: v_dual_lshrrev_b32 v96, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v97, 8, v12 :: v_dual_lshrrev_b32 v98, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v99, 8, v11 :: v_dual_lshrrev_b32 v100, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v101, 16, v10 :: v_dual_lshrrev_b32 v102, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v103, 16, v9 :: v_dual_lshrrev_b32 v112, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v113, 24, v8 :: v_dual_lshrrev_b32 v114, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v115, 8, v8 :: v_dual_lshrrev_b32 v116, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v117, 8, v7 :: v_dual_lshrrev_b32 v118, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v119, 16, v6 :: v_dual_lshrrev_b32 v128, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v129, 16, v5 :: v_dual_lshrrev_b32 v130, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v131, 24, v4 :: v_dual_lshrrev_b32 v132, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v133, 8, v4 :: v_dual_lshrrev_b32 v134, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v145, 8, v3 :: v_dual_lshrrev_b32 v147, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v149, 16, v2 :: v_dual_lshrrev_b32 v151, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v161, 16, v1 :: v_dual_lshrrev_b32 v162, 8, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v135, 24, v32 :: v_dual_lshrrev_b32 v144, 16, v32
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 8, v32 :: v_dual_lshrrev_b32 v148, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v31 :: v_dual_lshrrev_b32 v160, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v163, 16, v30 :: v_dual_lshrrev_b32 v164, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v165, 16, v29 :: v_dual_lshrrev_b32 v166, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v167, 24, v28 :: v_dual_lshrrev_b32 v176, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v177, 8, v28 :: v_dual_lshrrev_b32 v178, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v179, 8, v27 :: v_dual_lshrrev_b32 v180, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v181, 16, v26 :: v_dual_lshrrev_b32 v182, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v183, 16, v25 :: v_dual_lshrrev_b32 v40, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v41, 24, v24 :: v_dual_lshrrev_b32 v42, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v43, 8, v24 :: v_dual_lshrrev_b32 v44, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v45, 8, v23 :: v_dual_lshrrev_b32 v46, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v47, 16, v22 :: v_dual_lshrrev_b32 v56, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v57, 16, v21 :: v_dual_lshrrev_b32 v58, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v59, 24, v20 :: v_dual_lshrrev_b32 v60, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v61, 8, v20 :: v_dual_lshrrev_b32 v62, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v63, 8, v19 :: v_dual_lshrrev_b32 v72, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v73, 16, v18 :: v_dual_lshrrev_b32 v74, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v75, 16, v17 :: v_dual_lshrrev_b32 v76, 8, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[17:18]
+; GFX13-FAKE16-NEXT: .LBB98_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB98_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v32, v32, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[11:12]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[64:65], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[36:37], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[48:49], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[52:53], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[65:66], 24, v[21:22]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[37:38], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[49:50], 24, v[29:30]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[53:54], 24, v[25:26]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[66:67], 24, v[19:20]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[38:39], 24, v[31:32]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[50:51], 24, v[27:28]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[67:68], 24, v[17:18]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 24, v16 :: v_dual_lshrrev_b32 v70, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 8, v16 :: v_dual_lshrrev_b32 v80, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 8, v15 :: v_dual_lshrrev_b32 v82, 24, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v14 :: v_dual_lshrrev_b32 v84, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v85, 16, v13 :: v_dual_lshrrev_b32 v86, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v87, 24, v12 :: v_dual_lshrrev_b32 v96, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v97, 8, v12 :: v_dual_lshrrev_b32 v98, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v99, 8, v11 :: v_dual_lshrrev_b32 v100, 24, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v101, 16, v10 :: v_dual_lshrrev_b32 v102, 8, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v103, 16, v9 :: v_dual_lshrrev_b32 v112, 8, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v113, 24, v8 :: v_dual_lshrrev_b32 v114, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v115, 8, v8 :: v_dual_lshrrev_b32 v116, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v117, 8, v7 :: v_dual_lshrrev_b32 v118, 24, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v119, 16, v6 :: v_dual_lshrrev_b32 v128, 8, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v129, 16, v5 :: v_dual_lshrrev_b32 v130, 8, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v131, 24, v4 :: v_dual_lshrrev_b32 v132, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v133, 8, v4 :: v_dual_lshrrev_b32 v134, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v145, 8, v3 :: v_dual_lshrrev_b32 v147, 24, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v149, 16, v2 :: v_dual_lshrrev_b32 v151, 8, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v161, 16, v1 :: v_dual_lshrrev_b32 v162, 8, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v135, 24, v32 :: v_dual_lshrrev_b32 v144, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v146, 8, v32 :: v_dual_lshrrev_b32 v148, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v150, 8, v31 :: v_dual_lshrrev_b32 v160, 24, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v163, 16, v30 :: v_dual_lshrrev_b32 v164, 8, v30
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v165, 16, v29 :: v_dual_lshrrev_b32 v166, 8, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v167, 24, v28 :: v_dual_lshrrev_b32 v176, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v177, 8, v28 :: v_dual_lshrrev_b32 v178, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v179, 8, v27 :: v_dual_lshrrev_b32 v180, 24, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v181, 16, v26 :: v_dual_lshrrev_b32 v182, 8, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v183, 16, v25 :: v_dual_lshrrev_b32 v40, 8, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v41, 24, v24 :: v_dual_lshrrev_b32 v42, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v43, 8, v24 :: v_dual_lshrrev_b32 v44, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v45, 8, v23 :: v_dual_lshrrev_b32 v46, 24, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v47, 16, v22 :: v_dual_lshrrev_b32 v56, 8, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v57, 16, v21 :: v_dual_lshrrev_b32 v58, 8, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v59, 24, v20 :: v_dual_lshrrev_b32 v60, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v61, 8, v20 :: v_dual_lshrrev_b32 v62, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v63, 8, v19 :: v_dual_lshrrev_b32 v72, 24, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v73, 16, v18 :: v_dual_lshrrev_b32 v74, 8, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v75, 16, v17 :: v_dual_lshrrev_b32 v76, 8, v17
+; GFX13-FAKE16-NEXT: .LBB98_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v161, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v162, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v151, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v51, v149, v147, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v145, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v134, v52, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v133, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v132, v131, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v117, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v37, v116, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v51, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v3
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v130, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v48, v129, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v128, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v51, v119, v118, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v115, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v52, v114, v113, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v37, 16, v7
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v112, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v36, v103, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v102, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v37, v101, v100, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v11, v99, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v35, v98, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v12, v97, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v39, v96, v87, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v48, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v51, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v52, 16, v8
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v36, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v37, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v35, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v12
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v13, v86, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v85, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v84, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v83, v82, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v15, v81, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v80, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v16, v71, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v70, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v17, v76, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v75, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v18, v74, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v73, v72, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v19, v63, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v62, v66, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v20, v61, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v60, v59, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v21, v58, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v57, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v56, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v47, v46, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v15, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v17, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v19, 16, v18
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v23, v45, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v44, v54, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v24, v43, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v42, v41, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v40, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v183, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v182, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v181, v180, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v27, v179, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v178, v50, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v16, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v18, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v20, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v22, 16, v21
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v177, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v176, v167, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v23
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v166, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v165, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v30, v164, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v163, v160, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v31, v150, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v148, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v146, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v144, v135, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v21, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v23, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v27, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v28
+; GFX13-FAKE16-NEXT: s_clause 0x5
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off offset:32
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:48
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[9:12], off offset:64
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[13:16], off offset:80
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[17:20], off offset:96
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[21:24], off offset:112
+; GFX13-FAKE16-NEXT: s_clause 0x14 ; 84-byte Folded Reload
+; GFX13-FAKE16-NEXT: scratch_load_b32 v76, off, s32 offset:12 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v75, off, s32 offset:16 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v74, off, s32 offset:20 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v73, off, s32 offset:24 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v72, off, s32 offset:28 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v63, off, s32 offset:32 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v62, off, s32 offset:36 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v61, off, s32 offset:40 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v60, off, s32 offset:44 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v59, off, s32 offset:48 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v58, off, s32 offset:52 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v57, off, s32 offset:56 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v56, off, s32 offset:60 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v47, off, s32 offset:64 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v46, off, s32 offset:68 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v45, off, s32 offset:72 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v44, off, s32 offset:76 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v43, off, s32 offset:80 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v42, off, s32 offset:84 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v41, off, s32 offset:88 nv
+; GFX13-FAKE16-NEXT: scratch_load_b32 v40, off, s32 offset:92 nv
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -207120,6 +242616,849 @@ define inreg <128 x i8> @bitcast_v64i16_to_v128i8_scalar(<64 x i16> inreg %a, i3
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v128i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_or_saveexec_b32 s4, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v74, s32 offset:72 nv
+; GFX13-NEXT: scratch_store_b32 off, v75, s32 offset:76 nv
+; GFX13-NEXT: scratch_store_b32 off, v76, s32 offset:80 nv
+; GFX13-NEXT: scratch_store_b32 off, v77, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Spill
+; GFX13-NEXT: scratch_store_b32 off, v40, s32 offset:68 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v41, s32 offset:64 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v42, s32 offset:60 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v43, s32 offset:56 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v44, s32 offset:52 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v45, s32 offset:48 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v46, s32 offset:44 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v47, s32 offset:40 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v56, s32 offset:36 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v57, s32 offset:32 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v58, s32 offset:28 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v59, s32 offset:24 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v60, s32 offset:20 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v61, s32 offset:16 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v62, s32 offset:12 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v63, s32 offset:8 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v72, s32 offset:4 nv
+; GFX13-NEXT: ; meta instruction
+; GFX13-NEXT: scratch_store_b32 off, v73, s32 nv
+; GFX13-NEXT: v_writelane_b32 v74, s34, 0
+; GFX13-NEXT: v_writelane_b32 v74, s35, 1
+; GFX13-NEXT: v_writelane_b32 v74, s36, 2
+; GFX13-NEXT: v_writelane_b32 v74, s37, 3
+; GFX13-NEXT: v_writelane_b32 v74, s38, 4
+; GFX13-NEXT: v_writelane_b32 v74, s39, 5
+; GFX13-NEXT: v_writelane_b32 v74, s48, 6
+; GFX13-NEXT: v_writelane_b32 v74, s49, 7
+; GFX13-NEXT: v_writelane_b32 v74, s50, 8
+; GFX13-NEXT: v_writelane_b32 v74, s51, 9
+; GFX13-NEXT: v_writelane_b32 v74, s52, 10
+; GFX13-NEXT: v_writelane_b32 v74, s53, 11
+; GFX13-NEXT: v_writelane_b32 v74, s54, 12
+; GFX13-NEXT: v_writelane_b32 v74, s55, 13
+; GFX13-NEXT: v_writelane_b32 v74, s64, 14
+; GFX13-NEXT: v_writelane_b32 v74, s65, 15
+; GFX13-NEXT: v_writelane_b32 v74, s66, 16
+; GFX13-NEXT: v_writelane_b32 v74, s67, 17
+; GFX13-NEXT: v_writelane_b32 v74, s68, 18
+; GFX13-NEXT: v_writelane_b32 v74, s69, 19
+; GFX13-NEXT: v_writelane_b32 v74, s70, 20
+; GFX13-NEXT: v_writelane_b32 v74, s71, 21
+; GFX13-NEXT: v_writelane_b32 v74, s80, 22
+; GFX13-NEXT: v_writelane_b32 v74, s81, 23
+; GFX13-NEXT: v_writelane_b32 v74, s82, 24
+; GFX13-NEXT: v_writelane_b32 v74, s83, 25
+; GFX13-NEXT: v_writelane_b32 v74, s84, 26
+; GFX13-NEXT: v_writelane_b32 v74, s85, 27
+; GFX13-NEXT: v_writelane_b32 v74, s86, 28
+; GFX13-NEXT: v_writelane_b32 v74, s87, 29
+; GFX13-NEXT: v_writelane_b32 v74, s96, 30
+; GFX13-NEXT: v_writelane_b32 v74, s97, 31
+; GFX13-NEXT: v_writelane_b32 v75, s98, 0
+; GFX13-NEXT: v_writelane_b32 v75, s99, 1
+; GFX13-NEXT: v_writelane_b32 v75, s100, 2
+; GFX13-NEXT: v_writelane_b32 v75, s101, 3
+; GFX13-NEXT: v_writelane_b32 v75, s102, 4
+; GFX13-NEXT: v_writelane_b32 v75, s103, 5
+; GFX13-NEXT: v_writelane_b32 v75, s104, 6
+; GFX13-NEXT: v_writelane_b32 v75, s30, 7
+; GFX13-NEXT: v_writelane_b32 v75, s31, 8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-NEXT: v_readfirstlane_b32 s5, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s7, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s9, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s13, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s15, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s100, 0
+; GFX13-NEXT: ; implicit-def: $vgpr76 : SGPR spill to VGPR lane
+; GFX13-NEXT: ; implicit-def: $vgpr77 : SGPR spill to VGPR lane
+; GFX13-NEXT: s_cbranch_scc0 .LBB99_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s42, s27, 24
+; GFX13-NEXT: s_lshr_b32 s30, s5, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s31, s5, 16
+; GFX13-NEXT: s_lshr_b32 s35, s5, 8
+; GFX13-NEXT: s_lshr_b32 s34, s4, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s27, 8
+; GFX13-NEXT: s_lshr_b32 s36, s4, 8
+; GFX13-NEXT: s_lshr_b32 s37, s7, 24
+; GFX13-NEXT: s_lshr_b32 s38, s7, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-NEXT: s_lshr_b32 s48, s7, 8
+; GFX13-NEXT: s_lshr_b32 s39, s6, 16
+; GFX13-NEXT: s_lshr_b32 s49, s6, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s26, 8
+; GFX13-NEXT: s_lshr_b32 s50, s9, 24
+; GFX13-NEXT: s_lshr_b32 s51, s9, 16
+; GFX13-NEXT: s_lshr_b32 s53, s9, 8
+; GFX13-NEXT: v_writelane_b32 v77, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s25, 24
+; GFX13-NEXT: s_lshr_b32 s52, s8, 16
+; GFX13-NEXT: s_lshr_b32 s54, s8, 8
+; GFX13-NEXT: s_lshr_b32 s55, s11, 24
+; GFX13-NEXT: v_writelane_b32 v77, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s25, 16
+; GFX13-NEXT: s_lshr_b32 s64, s11, 16
+; GFX13-NEXT: s_lshr_b32 s66, s11, 8
+; GFX13-NEXT: s_lshr_b32 s65, s10, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s25, 8
+; GFX13-NEXT: s_lshr_b32 s67, s10, 8
+; GFX13-NEXT: s_lshr_b32 s68, s13, 24
+; GFX13-NEXT: s_lshr_b32 s69, s13, 16
+; GFX13-NEXT: v_writelane_b32 v77, s42, 0
+; GFX13-NEXT: s_lshr_b32 s42, s24, 16
+; GFX13-NEXT: s_lshr_b32 s71, s13, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 31
+; GFX13-NEXT: s_lshr_b32 s42, s24, 8
+; GFX13-NEXT: s_lshr_b32 s70, s12, 16
+; GFX13-NEXT: s_lshr_b32 s80, s12, 8
+; GFX13-NEXT: s_lshr_b32 s81, s15, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 30
+; GFX13-NEXT: s_lshr_b32 s42, s23, 24
+; GFX13-NEXT: s_lshr_b32 s82, s15, 16
+; GFX13-NEXT: s_lshr_b32 s84, s15, 8
+; GFX13-NEXT: s_lshr_b32 s83, s14, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 29
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s85, s14, 8
+; GFX13-NEXT: s_lshr_b32 s86, s41, 24
+; GFX13-NEXT: s_lshr_b32 s87, s41, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 28
+; GFX13-NEXT: s_lshr_b32 s42, s23, 8
+; GFX13-NEXT: s_lshr_b32 s97, s41, 8
+; GFX13-NEXT: s_lshr_b32 s96, s40, 16
+; GFX13-NEXT: s_lshr_b32 s98, s40, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 27
+; GFX13-NEXT: s_lshr_b32 s42, s22, 16
+; GFX13-NEXT: s_lshr_b32 s99, s29, 24
+; GFX13-NEXT: s_lshr_b32 s101, s29, 16
+; GFX13-NEXT: s_lshr_b32 s103, s29, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 26
+; GFX13-NEXT: s_lshr_b32 s42, s22, 8
+; GFX13-NEXT: s_lshr_b32 s102, s28, 16
+; GFX13-NEXT: s_lshr_b32 s104, s28, 8
+; GFX13-NEXT: s_lshr_b64 s[72:73], s[26:27], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 25
+; GFX13-NEXT: s_lshr_b32 s42, s21, 24
+; GFX13-NEXT: s_lshr_b64 s[62:63], s[24:25], 24
+; GFX13-NEXT: s_lshr_b64 s[60:61], s[22:23], 24
+; GFX13-NEXT: s_lshr_b64 s[58:59], s[20:21], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 24
+; GFX13-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-NEXT: s_lshr_b64 s[56:57], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[46:47], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[44:45], s[2:3], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 23
+; GFX13-NEXT: s_lshr_b32 s42, s21, 8
+; GFX13-NEXT: s_lshr_b64 s[74:75], s[4:5], 24
+; GFX13-NEXT: s_lshr_b64 s[76:77], s[6:7], 24
+; GFX13-NEXT: s_lshr_b64 s[78:79], s[8:9], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 22
+; GFX13-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-NEXT: s_lshr_b64 s[88:89], s[10:11], 24
+; GFX13-NEXT: s_lshr_b64 s[90:91], s[12:13], 24
+; GFX13-NEXT: s_lshr_b64 s[92:93], s[14:15], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 21
+; GFX13-NEXT: s_lshr_b32 s42, s20, 8
+; GFX13-NEXT: s_lshr_b64 s[94:95], s[40:41], 24
+; GFX13-NEXT: s_lshr_b64 vcc, s[28:29], 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 20
+; GFX13-NEXT: s_lshr_b32 s42, s19, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 19
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 18
+; GFX13-NEXT: s_lshr_b32 s42, s19, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 17
+; GFX13-NEXT: s_lshr_b32 s42, s18, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 16
+; GFX13-NEXT: s_lshr_b32 s42, s18, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 15
+; GFX13-NEXT: s_lshr_b32 s42, s17, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 14
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 13
+; GFX13-NEXT: s_lshr_b32 s42, s17, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 12
+; GFX13-NEXT: s_lshr_b32 s42, s16, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 11
+; GFX13-NEXT: s_lshr_b32 s42, s16, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 10
+; GFX13-NEXT: s_lshr_b32 s42, s3, 24
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 9
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 8
+; GFX13-NEXT: s_lshr_b32 s42, s3, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 7
+; GFX13-NEXT: s_lshr_b32 s42, s2, 16
+; GFX13-NEXT: v_writelane_b32 v76, s42, 6
+; GFX13-NEXT: s_lshr_b32 s42, s2, 8
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 5
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: v_writelane_b32 v76, s42, 4
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 3
+; GFX13-NEXT: s_lshr_b32 s42, s1, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 2
+; GFX13-NEXT: s_lshr_b32 s42, s0, 16
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: v_writelane_b32 v76, s42, 1
+; GFX13-NEXT: s_lshr_b32 s42, s0, 8
+; GFX13-NEXT: v_writelane_b32 v76, s42, 0
+; GFX13-NEXT: s_lshr_b64 s[42:43], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB99_3
+; GFX13-NEXT: .LBB99_2:
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: s_mov_b32 s100, -1
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr104
+; GFX13-NEXT: ; implicit-def: $sgpr102
+; GFX13-NEXT: ; implicit-def: $sgpr103
+; GFX13-NEXT: ; implicit-def: $sgpr101
+; GFX13-NEXT: ; implicit-def: $sgpr99
+; GFX13-NEXT: ; implicit-def: $sgpr98
+; GFX13-NEXT: ; implicit-def: $sgpr96
+; GFX13-NEXT: ; implicit-def: $sgpr97
+; GFX13-NEXT: ; implicit-def: $sgpr87
+; GFX13-NEXT: ; implicit-def: $sgpr86
+; GFX13-NEXT: ; implicit-def: $sgpr85
+; GFX13-NEXT: ; implicit-def: $sgpr83
+; GFX13-NEXT: ; implicit-def: $sgpr84
+; GFX13-NEXT: ; implicit-def: $sgpr82
+; GFX13-NEXT: ; implicit-def: $sgpr81
+; GFX13-NEXT: ; implicit-def: $sgpr80
+; GFX13-NEXT: ; implicit-def: $sgpr70
+; GFX13-NEXT: ; implicit-def: $sgpr71
+; GFX13-NEXT: ; implicit-def: $sgpr69
+; GFX13-NEXT: ; implicit-def: $sgpr68
+; GFX13-NEXT: ; implicit-def: $sgpr67
+; GFX13-NEXT: ; implicit-def: $sgpr65
+; GFX13-NEXT: ; implicit-def: $sgpr66
+; GFX13-NEXT: ; implicit-def: $sgpr64
+; GFX13-NEXT: ; implicit-def: $sgpr55
+; GFX13-NEXT: ; implicit-def: $sgpr54
+; GFX13-NEXT: ; implicit-def: $sgpr52
+; GFX13-NEXT: ; implicit-def: $sgpr53
+; GFX13-NEXT: ; implicit-def: $sgpr51
+; GFX13-NEXT: ; implicit-def: $sgpr50
+; GFX13-NEXT: ; implicit-def: $sgpr49
+; GFX13-NEXT: ; implicit-def: $sgpr39
+; GFX13-NEXT: ; implicit-def: $sgpr48
+; GFX13-NEXT: ; implicit-def: $sgpr38
+; GFX13-NEXT: ; implicit-def: $sgpr37
+; GFX13-NEXT: ; implicit-def: $sgpr36
+; GFX13-NEXT: ; implicit-def: $sgpr34
+; GFX13-NEXT: ; implicit-def: $sgpr35
+; GFX13-NEXT: ; implicit-def: $sgpr31
+; GFX13-NEXT: ; implicit-def: $sgpr30
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $vcc_lo
+; GFX13-NEXT: ; implicit-def: $sgpr94
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; kill: killed $sgpr43
+; GFX13-NEXT: .LBB99_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s43, s100, exec_lo
+; GFX13-NEXT: s_cselect_b32 s43, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s43, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB99_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v28, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v34, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v33, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v36, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v35, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_lshrrev_b64 v[51:52], 24, v[17:18]
+; GFX13-NEXT: v_lshrrev_b64 v[64:65], 24, v[27:28]
+; GFX13-NEXT: v_lshrrev_b64 v[52:53], 24, v[19:20]
+; GFX13-NEXT: v_lshrrev_b64 v[65:66], 24, v[29:30]
+; GFX13-NEXT: v_lshrrev_b64 v[53:54], 24, v[21:22]
+; GFX13-NEXT: v_lshrrev_b64 v[69:70], 24, v[33:34]
+; GFX13-NEXT: v_lshrrev_b64 v[37:38], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[48:49], 24, v[9:10]
+; GFX13-NEXT: v_lshrrev_b64 v[66:67], 24, v[13:14]
+; GFX13-NEXT: v_lshrrev_b64 v[54:55], 24, v[23:24]
+; GFX13-NEXT: v_lshrrev_b64 v[70:71], 24, v[35:36]
+; GFX13-NEXT: v_lshrrev_b64 v[25:26], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[31:32], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[38:39], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[49:50], 24, v[11:12]
+; GFX13-NEXT: v_lshrrev_b64 v[67:68], 24, v[15:16]
+; GFX13-NEXT: v_dual_lshrrev_b32 v148, 24, v18 :: v_dual_lshrrev_b32 v147, 16, v18
+; GFX13-NEXT: v_dual_lshrrev_b32 v146, 8, v18 :: v_dual_lshrrev_b32 v160, 16, v17
+; GFX13-NEXT: v_dual_lshrrev_b32 v150, 8, v17 :: v_dual_lshrrev_b32 v162, 24, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v161, 16, v20 :: v_dual_lshrrev_b32 v149, 8, v20
+; GFX13-NEXT: v_dual_lshrrev_b32 v163, 16, v19 :: v_dual_lshrrev_b32 v151, 8, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v166, 24, v22 :: v_dual_lshrrev_b32 v165, 16, v22
+; GFX13-NEXT: v_dual_lshrrev_b32 v164, 8, v22 :: v_dual_lshrrev_b32 v178, 16, v21
+; GFX13-NEXT: v_dual_lshrrev_b32 v176, 8, v21 :: v_dual_lshrrev_b32 v180, 24, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v179, 16, v24 :: v_dual_lshrrev_b32 v167, 8, v24
+; GFX13-NEXT: v_dual_lshrrev_b32 v181, 16, v23 :: v_dual_lshrrev_b32 v177, 8, v23
+; GFX13-NEXT: v_dual_lshrrev_b32 v42, 24, v28 :: v_dual_lshrrev_b32 v41, 16, v28
+; GFX13-NEXT: v_dual_lshrrev_b32 v183, 8, v28 :: v_dual_lshrrev_b32 v43, 16, v27
+; GFX13-NEXT: v_dual_lshrrev_b32 v182, 8, v27 :: v_dual_lshrrev_b32 v46, 24, v30
+; GFX13-NEXT: v_dual_lshrrev_b32 v44, 16, v30 :: v_dual_lshrrev_b32 v40, 8, v30
+; GFX13-NEXT: v_dual_lshrrev_b32 v47, 16, v29 :: v_dual_lshrrev_b32 v45, 8, v29
+; GFX13-NEXT: v_dual_lshrrev_b32 v59, 24, v34 :: v_dual_lshrrev_b32 v58, 16, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v57, 8, v34 :: v_dual_lshrrev_b32 v60, 16, v33
+; GFX13-NEXT: v_dual_lshrrev_b32 v56, 8, v33 :: v_dual_lshrrev_b32 v72, 24, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v62, 16, v36 :: v_dual_lshrrev_b32 v61, 8, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v73, 16, v35 :: v_dual_lshrrev_b32 v63, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v50, 24, v2 :: v_dual_lshrrev_b32 v39, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 8, v2 :: v_dual_lshrrev_b32 v71, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v32, 8, v1 :: v_dual_lshrrev_b32 v81, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v80, 16, v4 :: v_dual_lshrrev_b32 v55, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v84, 16, v3 :: v_dual_lshrrev_b32 v82, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v86, 24, v6 :: v_dual_lshrrev_b32 v85, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v83, 8, v6 :: v_dual_lshrrev_b32 v97, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v87, 8, v5 :: v_dual_lshrrev_b32 v100, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v99, 16, v8 :: v_dual_lshrrev_b32 v96, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v101, 16, v7 :: v_dual_lshrrev_b32 v98, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v112, 24, v10 :: v_dual_lshrrev_b32 v103, 16, v10
+; GFX13-NEXT: v_dual_lshrrev_b32 v102, 8, v10 :: v_dual_lshrrev_b32 v115, 16, v9
+; GFX13-NEXT: v_dual_lshrrev_b32 v113, 8, v9 :: v_dual_lshrrev_b32 v118, 24, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v117, 16, v12 :: v_dual_lshrrev_b32 v114, 8, v12
+; GFX13-NEXT: v_dual_lshrrev_b32 v119, 16, v11 :: v_dual_lshrrev_b32 v116, 8, v11
+; GFX13-NEXT: v_dual_lshrrev_b32 v130, 24, v14 :: v_dual_lshrrev_b32 v129, 16, v14
+; GFX13-NEXT: v_dual_lshrrev_b32 v128, 8, v14 :: v_dual_lshrrev_b32 v133, 16, v13
+; GFX13-NEXT: v_dual_lshrrev_b32 v131, 8, v13 :: v_dual_lshrrev_b32 v144, 24, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v135, 16, v16 :: v_dual_lshrrev_b32 v132, 8, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v145, 16, v15 :: v_dual_lshrrev_b32 v134, 8, v15
+; GFX13-NEXT: s_branch .LBB99_6
+; GFX13-NEXT: .LBB99_5:
+; GFX13-NEXT: v_dual_mov_b32 v35, s0 :: v_dual_mov_b32 v36, s1
+; GFX13-NEXT: v_readlane_b32 s0, v76, 0
+; GFX13-NEXT: v_dual_mov_b32 v15, s28 :: v_dual_mov_b32 v16, s29
+; GFX13-NEXT: v_dual_mov_b32 v13, s40 :: v_dual_mov_b32 v14, s41
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v63, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 1
+; GFX13-NEXT: v_dual_mov_b32 v11, s14 :: v_dual_mov_b32 v12, s15
+; GFX13-NEXT: v_dual_mov_b32 v9, s12 :: v_dual_mov_b32 v10, s13
+; GFX13-NEXT: v_mov_b32_e32 v73, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 2
+; GFX13-NEXT: v_dual_mov_b32 v7, s10 :: v_dual_mov_b32 v8, s11
+; GFX13-NEXT: v_dual_mov_b32 v5, s8 :: v_dual_mov_b32 v6, s9
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v61, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 3
+; GFX13-NEXT: v_dual_mov_b32 v3, s6 :: v_dual_mov_b32 v4, s7
+; GFX13-NEXT: v_dual_mov_b32 v1, s4 :: v_dual_mov_b32 v2, s5
+; GFX13-NEXT: v_mov_b32_e32 v62, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 4
+; GFX13-NEXT: v_dual_mov_b32 v33, s2 :: v_dual_mov_b32 v34, s3
+; GFX13-NEXT: v_dual_mov_b32 v29, s16 :: v_dual_mov_b32 v30, s17
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v72, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 5
+; GFX13-NEXT: v_dual_mov_b32 v27, s18 :: v_dual_mov_b32 v28, s19
+; GFX13-NEXT: v_dual_mov_b32 v23, s20 :: v_dual_mov_b32 v24, s21
+; GFX13-NEXT: v_mov_b32_e32 v56, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 6
+; GFX13-NEXT: v_dual_mov_b32 v21, s22 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v19, s24 :: v_dual_mov_b32 v20, s25
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v60, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 7
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s27
+; GFX13-NEXT: v_dual_mov_b32 v134, s104 :: v_dual_mov_b32 v145, s102
+; GFX13-NEXT: v_mov_b32_e32 v57, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 8
+; GFX13-NEXT: v_dual_mov_b32 v132, s103 :: v_dual_mov_b32 v135, s101
+; GFX13-NEXT: v_dual_mov_b32 v144, s99 :: v_dual_mov_b32 v131, s98
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v58, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 9
+; GFX13-NEXT: v_dual_mov_b32 v133, s96 :: v_dual_mov_b32 v128, s97
+; GFX13-NEXT: v_dual_mov_b32 v129, s87 :: v_dual_mov_b32 v130, s86
+; GFX13-NEXT: v_mov_b32_e32 v59, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 10
+; GFX13-NEXT: v_dual_mov_b32 v116, s85 :: v_dual_mov_b32 v119, s83
+; GFX13-NEXT: v_dual_mov_b32 v114, s84 :: v_dual_mov_b32 v117, s82
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v45, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 11
+; GFX13-NEXT: v_dual_mov_b32 v118, s81 :: v_dual_mov_b32 v113, s80
+; GFX13-NEXT: v_dual_mov_b32 v115, s70 :: v_dual_mov_b32 v102, s71
+; GFX13-NEXT: v_mov_b32_e32 v47, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 12
+; GFX13-NEXT: v_dual_mov_b32 v103, s69 :: v_dual_mov_b32 v112, s68
+; GFX13-NEXT: v_dual_mov_b32 v98, s67 :: v_dual_mov_b32 v101, s65
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v40, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 13
+; GFX13-NEXT: v_dual_mov_b32 v96, s66 :: v_dual_mov_b32 v99, s64
+; GFX13-NEXT: v_dual_mov_b32 v100, s55 :: v_dual_mov_b32 v87, s54
+; GFX13-NEXT: v_mov_b32_e32 v44, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 14
+; GFX13-NEXT: v_dual_mov_b32 v97, s52 :: v_dual_mov_b32 v83, s53
+; GFX13-NEXT: v_dual_mov_b32 v85, s51 :: v_dual_mov_b32 v86, s50
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v46, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 15
+; GFX13-NEXT: v_dual_mov_b32 v82, s49 :: v_dual_mov_b32 v84, s39
+; GFX13-NEXT: v_dual_mov_b32 v55, s48 :: v_dual_mov_b32 v80, s38
+; GFX13-NEXT: v_mov_b32_e32 v182, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 16
+; GFX13-NEXT: v_dual_mov_b32 v81, s37 :: v_dual_mov_b32 v32, s36
+; GFX13-NEXT: v_dual_mov_b32 v71, s34 :: v_dual_mov_b32 v26, s35
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v43, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 17
+; GFX13-NEXT: v_dual_mov_b32 v39, s31 :: v_dual_mov_b32 v50, s30
+; GFX13-NEXT: v_dual_mov_b32 v51, s72 :: v_dual_mov_b32 v52, s62
+; GFX13-NEXT: v_mov_b32_e32 v183, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 18
+; GFX13-NEXT: v_dual_mov_b32 v53, s60 :: v_dual_mov_b32 v54, s58
+; GFX13-NEXT: v_dual_mov_b32 v64, s56 :: v_dual_mov_b32 v65, s46
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v41, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 19
+; GFX13-NEXT: v_dual_mov_b32 v69, s44 :: v_dual_mov_b32 v70, s42
+; GFX13-NEXT: v_dual_mov_b32 v25, s74 :: v_dual_mov_b32 v31, s76
+; GFX13-NEXT: v_mov_b32_e32 v42, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 20
+; GFX13-NEXT: v_dual_mov_b32 v37, s78 :: v_dual_mov_b32 v38, s88
+; GFX13-NEXT: v_dual_mov_b32 v48, s90 :: v_dual_mov_b32 v49, s92
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_mov_b32_e32 v177, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 21
+; GFX13-NEXT: v_dual_mov_b32 v66, s94 :: v_dual_mov_b32 v67, vcc_lo
+; GFX13-NEXT: v_mov_b32_e32 v181, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 22
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v167, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 23
+; GFX13-NEXT: v_mov_b32_e32 v179, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v180, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 25
+; GFX13-NEXT: v_mov_b32_e32 v176, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 26
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v178, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 27
+; GFX13-NEXT: v_mov_b32_e32 v164, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 28
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v165, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 29
+; GFX13-NEXT: v_mov_b32_e32 v166, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v151, s0
+; GFX13-NEXT: v_readlane_b32 s0, v76, 31
+; GFX13-NEXT: v_mov_b32_e32 v163, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v149, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 1
+; GFX13-NEXT: v_mov_b32_e32 v161, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v162, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 3
+; GFX13-NEXT: v_mov_b32_e32 v150, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v160, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 5
+; GFX13-NEXT: v_mov_b32_e32 v146, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_mov_b32_e32 v147, s0
+; GFX13-NEXT: v_readlane_b32 s0, v77, 7
+; GFX13-NEXT: v_mov_b32_e32 v148, s0
+; GFX13-NEXT: .LBB99_6: ; %end
+; GFX13-NEXT: v_perm_b32 v68, v73, v70, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v62, v72, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v69, v60, v69, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v35, v35, v63, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v36, v36, v61, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v68, 16, v68 :: v_dual_lshlrev_b32 v70, 16, v70
+; GFX13-NEXT: v_perm_b32 v58, v58, v59, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v56, v33, v56, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v65, v47, v65, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v64, v43, v64, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v57, v34, v57, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v58, 16, v58 :: v_dual_bitop2_b32 v33, v35, v68 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshlrev_b32_e32 v65, 16, v65
+; GFX13-NEXT: v_dual_lshlrev_b32 v64, 16, v64 :: v_dual_bitop2_b32 v35, v56, v69 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v29, v29, v45, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v68, v44, v46, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v34, v36, v70
+; GFX13-NEXT: v_perm_b32 v69, v41, v42, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v70, v27, v182, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v36, v57, v58
+; GFX13-NEXT: v_perm_b32 v30, v30, v40, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v68, 16, v68
+; GFX13-NEXT: v_perm_b32 v182, v28, v183, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v69, 16, v69
+; GFX13-NEXT: v_perm_b32 v54, v181, v54, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v27, v29, v65
+; GFX13-NEXT: v_or_b32_e32 v29, v70, v64
+; GFX13-NEXT: v_perm_b32 v64, v179, v180, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v53, v178, v53, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v28, v30, v68
+; GFX13-NEXT: v_or_b32_e32 v30, v182, v69
+; GFX13-NEXT: v_perm_b32 v23, v23, v177, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v54, 16, v54
+; GFX13-NEXT: v_perm_b32 v24, v24, v167, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v64, 16, v64
+; GFX13-NEXT: v_perm_b32 v21, v21, v176, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v53, 16, v53
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_store_b128 v0, v[33:36], off
+; GFX13-NEXT: scratch_store_b128 v0, v[27:30], off offset:16
+; GFX13-NEXT: v_perm_b32 v30, v160, v51, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v19, v19, v151, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v20, v20, v149, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v29, v21, v53
+; GFX13-NEXT: v_perm_b32 v21, v22, v164, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v22, v163, v52, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v28, v24, v64
+; GFX13-NEXT: v_perm_b32 v24, v161, v162, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v27, v23, v54
+; GFX13-NEXT: v_perm_b32 v23, v165, v166, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_perm_b32 v17, v17, v150, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_lshlrev_b32 v33, 16, v30
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_bitop2_b32 v19, v19, v22 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v22, v147, v148, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v15, v15, v134, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v16, v16, v132, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v30, v21, v23
+; GFX13-NEXT: v_or_b32_e32 v21, v17, v33
+; GFX13-NEXT: v_perm_b32 v17, v18, v146, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v18, v145, v67, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v20, v20, v24
+; GFX13-NEXT: v_perm_b32 v23, v135, v144, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v133, v66, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v22, 16, v22
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v13, v13, v131, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v12, v12, v114, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v9, v113, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v11, v11, v116, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v16, v16, v23
+; GFX13-NEXT: v_perm_b32 v23, v117, v118, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v22, v17, v22
+; GFX13-NEXT: v_or_b32_e32 v17, v13, v24
+; GFX13-NEXT: v_perm_b32 v24, v115, v48, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v15, v15, v18
+; GFX13-NEXT: v_perm_b32 v18, v129, v130, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v14, v128, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v119, v49, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v23, 16, v23 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v18
+; GFX13-NEXT: v_perm_b32 v7, v7, v98, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_bitop2_b32 v12, v12, v23 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v23, v99, v100, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v18, v13, v18
+; GFX13-NEXT: v_or_b32_e32 v13, v9, v24
+; GFX13-NEXT: v_perm_b32 v9, v10, v102, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v101, v38, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v97, v37, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v11, v11, v14
+; GFX13-NEXT: v_perm_b32 v14, v103, v112, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v8, v8, v96, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v5, v5, v87, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v14, 16, v14 :: v_dual_lshlrev_b32 v24, 16, v24
+; GFX13-NEXT: v_perm_b32 v6, v6, v83, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v8, v8, v23
+; GFX13-NEXT: v_perm_b32 v23, v80, v81, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v7, v7, v10
+; GFX13-NEXT: v_perm_b32 v10, v85, v86, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v14, v9, v14
+; GFX13-NEXT: v_or_b32_e32 v9, v5, v24
+; GFX13-NEXT: v_perm_b32 v5, v84, v31, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v24, v71, v25, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v25, v39, v50, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v3, v3, v82, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v4, v4, v55, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v23, 16, v23
+; GFX13-NEXT: v_perm_b32 v31, v1, v32, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v24, 16, v24 :: v_dual_bitop2_b32 v10, v6, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v26, v2, v26, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v25, 16, v25
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v23
+; GFX13-NEXT: v_or_b32_e32 v3, v31, v24
+; GFX13-NEXT: v_readlane_b32 s30, v75, 7
+; GFX13-NEXT: v_or_b32_e32 v4, v26, v25
+; GFX13-NEXT: s_clause 0x5
+; GFX13-NEXT: scratch_store_b128 v0, v[27:30], off offset:32
+; GFX13-NEXT: scratch_store_b128 v0, v[19:22], off offset:48
+; GFX13-NEXT: scratch_store_b128 v0, v[15:18], off offset:64
+; GFX13-NEXT: scratch_store_b128 v0, v[11:14], off offset:80
+; GFX13-NEXT: scratch_store_b128 v0, v[7:10], off offset:96
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off offset:112
+; GFX13-NEXT: s_clause 0x11 ; 72-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v73, off, s32 nv
+; GFX13-NEXT: scratch_load_b32 v72, off, s32 offset:4 nv
+; GFX13-NEXT: scratch_load_b32 v63, off, s32 offset:8 nv
+; GFX13-NEXT: scratch_load_b32 v62, off, s32 offset:12 nv
+; GFX13-NEXT: scratch_load_b32 v61, off, s32 offset:16 nv
+; GFX13-NEXT: scratch_load_b32 v60, off, s32 offset:20 nv
+; GFX13-NEXT: scratch_load_b32 v59, off, s32 offset:24 nv
+; GFX13-NEXT: scratch_load_b32 v58, off, s32 offset:28 nv
+; GFX13-NEXT: scratch_load_b32 v57, off, s32 offset:32 nv
+; GFX13-NEXT: scratch_load_b32 v56, off, s32 offset:36 nv
+; GFX13-NEXT: scratch_load_b32 v47, off, s32 offset:40 nv
+; GFX13-NEXT: scratch_load_b32 v46, off, s32 offset:44 nv
+; GFX13-NEXT: scratch_load_b32 v45, off, s32 offset:48 nv
+; GFX13-NEXT: scratch_load_b32 v44, off, s32 offset:52 nv
+; GFX13-NEXT: scratch_load_b32 v43, off, s32 offset:56 nv
+; GFX13-NEXT: scratch_load_b32 v42, off, s32 offset:60 nv
+; GFX13-NEXT: scratch_load_b32 v41, off, s32 offset:64 nv
+; GFX13-NEXT: scratch_load_b32 v40, off, s32 offset:68 nv
+; GFX13-NEXT: v_readlane_b32 s31, v75, 8
+; GFX13-NEXT: v_readlane_b32 s104, v75, 6
+; GFX13-NEXT: v_readlane_b32 s103, v75, 5
+; GFX13-NEXT: v_readlane_b32 s102, v75, 4
+; GFX13-NEXT: v_readlane_b32 s101, v75, 3
+; GFX13-NEXT: v_readlane_b32 s100, v75, 2
+; GFX13-NEXT: v_readlane_b32 s99, v75, 1
+; GFX13-NEXT: v_readlane_b32 s98, v75, 0
+; GFX13-NEXT: v_readlane_b32 s97, v74, 31
+; GFX13-NEXT: v_readlane_b32 s96, v74, 30
+; GFX13-NEXT: v_readlane_b32 s87, v74, 29
+; GFX13-NEXT: v_readlane_b32 s86, v74, 28
+; GFX13-NEXT: v_readlane_b32 s85, v74, 27
+; GFX13-NEXT: v_readlane_b32 s84, v74, 26
+; GFX13-NEXT: v_readlane_b32 s83, v74, 25
+; GFX13-NEXT: v_readlane_b32 s82, v74, 24
+; GFX13-NEXT: v_readlane_b32 s81, v74, 23
+; GFX13-NEXT: v_readlane_b32 s80, v74, 22
+; GFX13-NEXT: v_readlane_b32 s71, v74, 21
+; GFX13-NEXT: v_readlane_b32 s70, v74, 20
+; GFX13-NEXT: v_readlane_b32 s69, v74, 19
+; GFX13-NEXT: v_readlane_b32 s68, v74, 18
+; GFX13-NEXT: v_readlane_b32 s67, v74, 17
+; GFX13-NEXT: v_readlane_b32 s66, v74, 16
+; GFX13-NEXT: v_readlane_b32 s65, v74, 15
+; GFX13-NEXT: v_readlane_b32 s64, v74, 14
+; GFX13-NEXT: v_readlane_b32 s55, v74, 13
+; GFX13-NEXT: v_readlane_b32 s54, v74, 12
+; GFX13-NEXT: v_readlane_b32 s53, v74, 11
+; GFX13-NEXT: v_readlane_b32 s52, v74, 10
+; GFX13-NEXT: v_readlane_b32 s51, v74, 9
+; GFX13-NEXT: v_readlane_b32 s50, v74, 8
+; GFX13-NEXT: v_readlane_b32 s49, v74, 7
+; GFX13-NEXT: v_readlane_b32 s48, v74, 6
+; GFX13-NEXT: v_readlane_b32 s39, v74, 5
+; GFX13-NEXT: v_readlane_b32 s38, v74, 4
+; GFX13-NEXT: v_readlane_b32 s37, v74, 3
+; GFX13-NEXT: v_readlane_b32 s36, v74, 2
+; GFX13-NEXT: v_readlane_b32 s35, v74, 1
+; GFX13-NEXT: v_readlane_b32 s34, v74, 0
+; GFX13-NEXT: s_or_saveexec_b32 s0, -1
+; GFX13-NEXT: s_clause 0x3 ; 16-byte Folded Reload
+; GFX13-NEXT: scratch_load_b32 v74, off, s32 offset:72 nv
+; GFX13-NEXT: scratch_load_b32 v75, off, s32 offset:76 nv
+; GFX13-NEXT: scratch_load_b32 v76, off, s32 offset:80 nv
+; GFX13-NEXT: scratch_load_b32 v77, off, s32 offset:84 nv
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -210558,6 +246897,62 @@ define <64 x half> @bitcast_v64bf16_to_v64f16(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v64f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB100_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB100_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -214991,6 +251386,122 @@ define inreg <64 x half> @bitcast_v64bf16_to_v64f16_scalar(<64 x bfloat> inreg %
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v64f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB101_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB101_5
+; GFX13-NEXT: .LBB101_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB101_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -216316,6 +252827,62 @@ define <64 x bfloat> @bitcast_v64f16_to_v64bf16(<64 x half> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v64bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB102_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB102_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -217797,6 +254364,122 @@ define inreg <64 x bfloat> @bitcast_v64f16_to_v64bf16_scalar(<64 x half> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v64bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB103_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB103_5
+; GFX13-NEXT: .LBB103_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB103_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -221238,6 +257921,62 @@ define <64 x i16> @bitcast_v64bf16_to_v64i16(<64 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v64i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB104_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB104_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -225107,6 +261846,122 @@ define inreg <64 x i16> @bitcast_v64bf16_to_v64i16_scalar(<64 x bfloat> inreg %a
; GFX11-FAKE16-NEXT: s_mov_b32 exec_lo, s0
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64bf16_to_v64i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB105_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB105_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB105_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v13, 0x40c0, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v12, 0x40c0, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v11, 0x40c0, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v10, 0x40c0, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v31, 0x40c0, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v30, 0x40c0, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v29, 0x40c0, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v28, 0x40c0, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v27, 0x40c0, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v26, 0x40c0, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v25, 0x40c0, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v24, 0x40c0, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v23, 0x40c0, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v22, 0x40c0, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v21, 0x40c0, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v20, 0x40c0, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB105_5
+; GFX13-NEXT: .LBB105_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB105_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -226088,6 +262943,62 @@ define <64 x bfloat> @bitcast_v64i16_to_v64bf16(<64 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v64bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB106_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -227366,6 +264277,122 @@ define inreg <64 x bfloat> @bitcast_v64i16_to_v64bf16_scalar(<64 x i16> inreg %a
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v64bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB107_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB107_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB107_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v31, s51, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s50, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s49, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s48, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s47, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s46, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s45, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s44, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s43, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s42, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s39, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s38, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s37, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s36, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_branch .LBB107_5
+; GFX13-NEXT: .LBB107_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB107_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -228081,6 +265108,62 @@ define <64 x i16> @bitcast_v64f16_to_v64i16(<64 x half> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v64i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB108_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, v31 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, v30 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB108_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -229260,6 +266343,122 @@ define inreg <64 x i16> @bitcast_v64f16_to_v64i16_scalar(<64 x half> inreg %a, i
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64f16_to_v64i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB109_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB109_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB109_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v31, 0x200, s51 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v30, 0x200, s50 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s49 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s48 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s45 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s44 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s43 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s42 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s41 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s40 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s39 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s38 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s37 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s36 op_sel_hi:[0,1]
+; GFX13-NEXT: s_branch .LBB109_5
+; GFX13-NEXT: .LBB109_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB109_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -230445,6 +267644,62 @@ define <64 x half> @bitcast_v64i16_to_v64f16(<64 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v64f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_clause 0x1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 offset:4
+; GFX13-NEXT: scratch_load_b32 v31, off, s32
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: s_wait_loadcnt 0x1
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v32
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: v_pk_add_u16 v31, v31, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, v30, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB110_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -231764,6 +269019,122 @@ define inreg <64 x half> @bitcast_v64i16_to_v64f16_scalar(<64 x i16> inreg %a, i
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v64i16_to_v64f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v14
+; GFX13-NEXT: v_readfirstlane_b32 s51, v13
+; GFX13-NEXT: v_readfirstlane_b32 s50, v12
+; GFX13-NEXT: v_readfirstlane_b32 s49, v11
+; GFX13-NEXT: v_readfirstlane_b32 s48, v10
+; GFX13-NEXT: v_readfirstlane_b32 s47, v9
+; GFX13-NEXT: v_readfirstlane_b32 s46, v8
+; GFX13-NEXT: v_readfirstlane_b32 s45, v7
+; GFX13-NEXT: v_readfirstlane_b32 s44, v6
+; GFX13-NEXT: v_readfirstlane_b32 s43, v5
+; GFX13-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-NEXT: v_readfirstlane_b32 s41, v3
+; GFX13-NEXT: v_readfirstlane_b32 s40, v2
+; GFX13-NEXT: v_readfirstlane_b32 s39, v1
+; GFX13-NEXT: v_readfirstlane_b32 s38, v0
+; GFX13-NEXT: s_mov_b32 s37, s29
+; GFX13-NEXT: s_mov_b32 s36, s28
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB111_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB111_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB111_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v31, s51, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v30, s50, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s49, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s48, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s47, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s46, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s45, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s44, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s43, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s42, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s41, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s40, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s39, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s38, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s37, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s36, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_branch .LBB111_5
+; GFX13-NEXT: .LBB111_4:
+; GFX13-NEXT: v_dual_mov_b32 v16, s36 :: v_dual_mov_b32 v17, s37
+; GFX13-NEXT: v_dual_mov_b32 v18, s38 :: v_dual_mov_b32 v19, s39
+; GFX13-NEXT: v_dual_mov_b32 v20, s40 :: v_dual_mov_b32 v21, s41
+; GFX13-NEXT: v_dual_mov_b32 v22, s42 :: v_dual_mov_b32 v23, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s44 :: v_dual_mov_b32 v25, s45
+; GFX13-NEXT: v_dual_mov_b32 v26, s46 :: v_dual_mov_b32 v27, s47
+; GFX13-NEXT: v_dual_mov_b32 v28, s48 :: v_dual_mov_b32 v29, s49
+; GFX13-NEXT: v_dual_mov_b32 v30, s50 :: v_dual_mov_b32 v31, s51
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: .LBB111_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.128bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.128bit.ll
index 17fa6366bbca1..f100e1d829f7f 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.128bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.128bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <4 x float> @bitcast_v4i32_to_v4f32(<4 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v4i32_to_v4f32:
@@ -71,6 +73,25 @@ define <4 x float> @bitcast_v4i32_to_v4f32(<4 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v4f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -194,6 +215,35 @@ define inreg <4 x float> @bitcast_v4i32_to_v4f32_scalar(<4 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -274,6 +324,25 @@ define <4 x i32> @bitcast_v4f32_to_v4i32(<4 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v4i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -400,6 +469,35 @@ define inreg <4 x i32> @bitcast_v4f32_to_v4i32_scalar(<4 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -482,6 +580,25 @@ define <2 x i64> @bitcast_v4i32_to_v2i64(<4 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v2i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -605,6 +722,35 @@ define inreg <2 x i64> @bitcast_v4i32_to_v2i64_scalar(<4 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -688,6 +834,28 @@ define <4 x i32> @bitcast_v2i64_to_v4i32(<2 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v4i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -811,6 +979,33 @@ define inreg <4 x i32> @bitcast_v2i64_to_v4i32_scalar(<2 x i64> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -893,6 +1088,25 @@ define <2 x double> @bitcast_v4i32_to_v2f64(<4 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v2f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1016,6 +1230,35 @@ define inreg <2 x double> @bitcast_v4i32_to_v2f64_scalar(<4 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1093,6 +1336,26 @@ define <4 x i32> @bitcast_v2f64_to_v4i32(<2 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v4i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1211,6 +1474,33 @@ define inreg <4 x i32> @bitcast_v2f64_to_v4i32_scalar(<2 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1319,6 +1609,25 @@ define <8 x i16> @bitcast_v4i32_to_v8i16(<4 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v8i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1466,6 +1775,35 @@ define inreg <8 x i16> @bitcast_v4i32_to_v8i16_scalar(<4 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1607,6 +1945,27 @@ define <4 x i32> @bitcast_v8i16_to_v4i32(<8 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v4i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1780,6 +2139,35 @@ define inreg <4 x i32> @bitcast_v8i16_to_v4i32_scalar(<8 x i16> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1888,6 +2276,25 @@ define <8 x half> @bitcast_v4i32_to_v8f16(<4 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v8f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2035,6 +2442,35 @@ define inreg <8 x half> @bitcast_v4i32_to_v8f16_scalar(<4 x i32> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2193,6 +2629,27 @@ define <4 x i32> @bitcast_v8f16_to_v4i32(<8 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v4i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2382,6 +2839,35 @@ define inreg <4 x i32> @bitcast_v8f16_to_v4i32_scalar(<8 x half> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2511,6 +2997,25 @@ define <8 x bfloat> @bitcast_v4i32_to_v8bf16(<4 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v8bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2670,6 +3175,35 @@ define inreg <8 x bfloat> @bitcast_v4i32_to_v8bf16_scalar(<4 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3096,6 +3630,27 @@ define <4 x i32> @bitcast_v8bf16_to_v4i32(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB22_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v4i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3588,6 +4143,35 @@ define inreg <4 x i32> @bitcast_v8bf16_to_v4i32_scalar(<8 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3921,6 +4505,118 @@ define <16 x i8> @bitcast_v4i32_to_v16i8(<4 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i32_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB24_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB24_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v17 :: v_dual_lshrrev_b32 v15, 24, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v6, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v17 :: v_dual_lshrrev_b32 v2, 16, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB24_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i32_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB24_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB24_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v17, 3, v17
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v16, 3, v16 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB24_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4232,6 +4928,79 @@ define inreg <16 x i8> @bitcast_v4i32_to_v16i8_scalar(<4 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s10
; GFX11-NEXT: v_dual_mov_b32 v14, s9 :: v_dual_mov_b32 v15, s8
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i32_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s18, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB25_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s3, 24
+; GFX13-NEXT: s_lshr_b32 s9, s3, 16
+; GFX13-NEXT: s_lshr_b32 s10, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s12, s2, 8
+; GFX13-NEXT: s_lshr_b32 s13, s1, 24
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB25_3
+; GFX13-NEXT: .LBB25_2:
+; GFX13-NEXT: s_mov_b32 s18, -1
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB25_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s18, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s8, s3, 24
+; GFX13-NEXT: s_lshr_b32 s9, s3, 16
+; GFX13-NEXT: s_lshr_b32 s10, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s12, s2, 8
+; GFX13-NEXT: s_lshr_b32 s13, s1, 24
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: .LBB25_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s17
+; GFX13-NEXT: v_dual_mov_b32 v2, s16 :: v_dual_mov_b32 v3, s6
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s15
+; GFX13-NEXT: v_dual_mov_b32 v6, s14 :: v_dual_mov_b32 v7, s13
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s4
+; GFX13-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s10
+; GFX13-NEXT: v_dual_mov_b32 v14, s9 :: v_dual_mov_b32 v15, s8
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4751,6 +5520,193 @@ define <4 x i32> @bitcast_v16i8_to_v4i32(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v4i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB26_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB26_4
+; GFX13-TRUE16-NEXT: .LBB26_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB26_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-TRUE16-NEXT: .LBB26_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v4i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB26_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB26_4
+; GFX13-FAKE16-NEXT: .LBB26_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB26_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-FAKE16-NEXT: .LBB26_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5137,6 +6093,85 @@ define inreg <4 x i32> @bitcast_v16i8_to_v4i32_scalar(<16 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB27_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v4i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB27_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB27_3
+; GFX13-NEXT: .LBB27_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB27_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5217,6 +6252,25 @@ define <2 x i64> @bitcast_v4f32_to_v2i64(<4 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v2i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5343,6 +6397,35 @@ define inreg <2 x i64> @bitcast_v4f32_to_v2i64_scalar(<4 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5426,6 +6509,28 @@ define <4 x float> @bitcast_v2i64_to_v4f32(<2 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v4f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5549,6 +6654,33 @@ define inreg <4 x float> @bitcast_v2i64_to_v4f32_scalar(<2 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB31_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5629,6 +6761,25 @@ define <2 x double> @bitcast_v4f32_to_v2f64(<4 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v2f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5755,6 +6906,35 @@ define inreg <2 x double> @bitcast_v4f32_to_v2f64_scalar(<4 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5832,6 +7012,26 @@ define <4 x float> @bitcast_v2f64_to_v4f32(<2 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB34_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v4f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB34_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5950,6 +7150,33 @@ define inreg <4 x float> @bitcast_v2f64_to_v4f32_scalar(<2 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6056,6 +7283,25 @@ define <8 x i16> @bitcast_v4f32_to_v8i16(<4 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v8i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6211,6 +7457,35 @@ define inreg <8 x i16> @bitcast_v4f32_to_v8i16_scalar(<4 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6352,6 +7627,27 @@ define <4 x float> @bitcast_v8i16_to_v4f32(<8 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v4f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6525,6 +7821,35 @@ define inreg <4 x float> @bitcast_v8i16_to_v4f32_scalar(<8 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6631,6 +7956,25 @@ define <8 x half> @bitcast_v4f32_to_v8f16(<4 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v8f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6786,6 +8130,35 @@ define inreg <8 x half> @bitcast_v4f32_to_v8f16_scalar(<4 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB41_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6944,6 +8317,27 @@ define <4 x float> @bitcast_v8f16_to_v4f32(<8 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v4f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7133,6 +8527,35 @@ define inreg <4 x float> @bitcast_v8f16_to_v4f32_scalar(<8 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7260,6 +8683,25 @@ define <8 x bfloat> @bitcast_v4f32_to_v8bf16(<4 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v8bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7431,6 +8873,35 @@ define inreg <8 x bfloat> @bitcast_v4f32_to_v8bf16_scalar(<4 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB45_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7857,6 +9328,27 @@ define <4 x float> @bitcast_v8bf16_to_v4f32(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v4f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8349,6 +9841,35 @@ define inreg <4 x float> @bitcast_v8bf16_to_v4f32_scalar(<8 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8678,6 +10199,118 @@ define <16 x i8> @bitcast_v4f32_to_v16i8(<4 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4f32_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v17 :: v_dual_lshrrev_b32 v15, 24, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v6, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v17 :: v_dual_lshrrev_b32 v2, 16, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4f32_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v17, 1.0, v17
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v16, 1.0, v16 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9018,6 +10651,79 @@ define inreg <16 x i8> @bitcast_v4f32_to_v16i8_scalar(<4 x float> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v8, v16
; GFX11-NEXT: v_mov_b32_e32 v12, v17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f32_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s18, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s3, 24
+; GFX13-NEXT: s_lshr_b32 s9, s3, 16
+; GFX13-NEXT: s_lshr_b32 s10, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s12, s2, 8
+; GFX13-NEXT: s_lshr_b32 s13, s1, 24
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB49_3
+; GFX13-NEXT: .LBB49_2:
+; GFX13-NEXT: s_mov_b32 s18, -1
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB49_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s18, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s13, s1, 24
+; GFX13-NEXT: s_lshr_b32 s8, s3, 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s9, s3, 16
+; GFX13-NEXT: s_lshr_b32 s10, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s12, s2, 8
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: .LBB49_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s17
+; GFX13-NEXT: v_dual_mov_b32 v2, s16 :: v_dual_mov_b32 v3, s6
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s15
+; GFX13-NEXT: v_dual_mov_b32 v6, s14 :: v_dual_mov_b32 v7, s13
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s4
+; GFX13-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s10
+; GFX13-NEXT: v_dual_mov_b32 v14, s9 :: v_dual_mov_b32 v15, s8
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9537,6 +11243,193 @@ define <4 x float> @bitcast_v16i8_to_v4f32(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v4f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v4f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9923,6 +11816,85 @@ define inreg <4 x float> @bitcast_v16i8_to_v4f32_scalar(<16 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB51_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v4f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB51_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB51_3
+; GFX13-NEXT: .LBB51_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB51_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB51_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10006,6 +11978,28 @@ define <2 x double> @bitcast_v2i64_to_v2f64(<2 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v2f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10128,6 +12122,32 @@ define inreg <2 x double> @bitcast_v2i64_to_v2f64_scalar(<2 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: .LBB53_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10205,6 +12225,26 @@ define <2 x i64> @bitcast_v2f64_to_v2i64(<2 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB54_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v2i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: .LBB54_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10323,6 +12363,33 @@ define inreg <2 x i64> @bitcast_v2f64_to_v2i64_scalar(<2 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10432,6 +12499,28 @@ define <8 x i16> @bitcast_v2i64_to_v8i16(<2 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v8i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10579,6 +12668,33 @@ define inreg <8 x i16> @bitcast_v2i64_to_v8i16_scalar(<2 x i64> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB57_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10720,6 +12836,27 @@ define <2 x i64> @bitcast_v8i16_to_v2i64(<8 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v2i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10893,6 +13030,35 @@ define inreg <2 x i64> @bitcast_v8i16_to_v2i64_scalar(<8 x i16> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11002,6 +13168,28 @@ define <8 x half> @bitcast_v2i64_to_v8f16(<2 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v8f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11149,6 +13337,33 @@ define inreg <8 x half> @bitcast_v2i64_to_v8f16_scalar(<2 x i64> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB61_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB61_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11307,6 +13522,27 @@ define <2 x i64> @bitcast_v8f16_to_v2i64(<8 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v2i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11496,6 +13732,35 @@ define inreg <2 x i64> @bitcast_v8f16_to_v2i64_scalar(<8 x half> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB63_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB63_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11626,6 +13891,28 @@ define <8 x bfloat> @bitcast_v2i64_to_v8bf16(<2 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v8bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11785,6 +14072,33 @@ define inreg <8 x bfloat> @bitcast_v2i64_to_v8bf16_scalar(<2 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB65_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB65_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12211,6 +14525,27 @@ define <2 x i64> @bitcast_v8bf16_to_v2i64(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB66_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v2i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12703,6 +15038,35 @@ define inreg <2 x i64> @bitcast_v8bf16_to_v2i64_scalar(<8 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB67_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB67_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13036,6 +15400,120 @@ define <16 x i8> @bitcast_v2i64_to_v16i8(<2 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2i64_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB68_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB68_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v11, vcc_lo, v11, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v12, null, 0, v12, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB68_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2i64_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB68_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB68_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB68_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13347,6 +15825,77 @@ define inreg <16 x i8> @bitcast_v2i64_to_v16i8_scalar(<2 x i64> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s10
; GFX11-NEXT: v_dual_mov_b32 v14, s9 :: v_dual_mov_b32 v15, s8
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i64_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s18, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB69_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s3, 24
+; GFX13-NEXT: s_lshr_b32 s9, s3, 16
+; GFX13-NEXT: s_lshr_b32 s10, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s12, s2, 8
+; GFX13-NEXT: s_lshr_b32 s13, s1, 24
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB69_3
+; GFX13-NEXT: .LBB69_2:
+; GFX13-NEXT: s_mov_b32 s18, -1
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB69_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s18, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s8, s3, 24
+; GFX13-NEXT: s_lshr_b32 s9, s3, 16
+; GFX13-NEXT: s_lshr_b32 s10, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s12, s2, 8
+; GFX13-NEXT: s_lshr_b32 s13, s1, 24
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: .LBB69_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s17
+; GFX13-NEXT: v_dual_mov_b32 v2, s16 :: v_dual_mov_b32 v3, s6
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s15
+; GFX13-NEXT: v_dual_mov_b32 v6, s14 :: v_dual_mov_b32 v7, s13
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s4
+; GFX13-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s10
+; GFX13-NEXT: v_dual_mov_b32 v14, s9 :: v_dual_mov_b32 v15, s8
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13866,6 +16415,193 @@ define <2 x i64> @bitcast_v16i8_to_v2i64(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v2i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-TRUE16-NEXT: .LBB70_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-TRUE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v2i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-FAKE16-NEXT: .LBB70_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-FAKE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14252,6 +16988,85 @@ define inreg <2 x i64> @bitcast_v16i8_to_v2i64_scalar(<16 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB71_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v2i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB71_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB71_3
+; GFX13-NEXT: .LBB71_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB71_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB71_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14355,6 +17170,26 @@ define <8 x i16> @bitcast_v2f64_to_v8i16(<2 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB72_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v8i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB72_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB72_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14502,6 +17337,33 @@ define inreg <8 x i16> @bitcast_v2f64_to_v8i16_scalar(<2 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB73_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB73_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14643,6 +17505,27 @@ define <2 x double> @bitcast_v8i16_to_v2f64(<8 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v2f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14816,6 +17699,35 @@ define inreg <2 x double> @bitcast_v8i16_to_v2f64_scalar(<8 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB75_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB75_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14919,6 +17831,26 @@ define <8 x half> @bitcast_v2f64_to_v8f16(<2 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB76_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v8f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB76_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15066,6 +17998,33 @@ define inreg <8 x half> @bitcast_v2f64_to_v8f16_scalar(<2 x double> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB77_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB77_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15224,6 +18183,27 @@ define <2 x double> @bitcast_v8f16_to_v2f64(<8 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v2f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15413,6 +18393,35 @@ define inreg <2 x double> @bitcast_v8f16_to_v2f64_scalar(<8 x half> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB79_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB79_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15535,6 +18544,26 @@ define <8 x bfloat> @bitcast_v2f64_to_v8bf16(<2 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB80_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v8bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB80_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB80_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15698,6 +18727,33 @@ define inreg <8 x bfloat> @bitcast_v2f64_to_v8bf16_scalar(<2 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB81_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB81_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16124,6 +19180,27 @@ define <2 x double> @bitcast_v8bf16_to_v2f64(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB82_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v2f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16616,6 +19693,35 @@ define inreg <2 x double> @bitcast_v8bf16_to_v2f64_scalar(<8 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB83_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB83_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16941,6 +20047,114 @@ define <16 x i8> @bitcast_v2f64_to_v16i8(<2 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2f64_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB84_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB84_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB84_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[11:12], 1.0, v[11:12]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB84_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2f64_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB84_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB84_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB84_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB84_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17272,6 +20486,76 @@ define inreg <16 x i8> @bitcast_v2f64_to_v16i8_scalar(<2 x double> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v8, v16
; GFX11-NEXT: v_mov_b32_e32 v12, v17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f64_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB85_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s3, 24
+; GFX13-NEXT: s_lshr_b32 s13, s3, 16
+; GFX13-NEXT: s_lshr_b32 s12, s3, 8
+; GFX13-NEXT: s_lshr_b32 s16, s2, 16
+; GFX13-NEXT: s_lshr_b32 s15, s2, 8
+; GFX13-NEXT: s_lshr_b32 s11, s1, 24
+; GFX13-NEXT: s_lshr_b32 s10, s1, 16
+; GFX13-NEXT: s_lshr_b32 s9, s1, 8
+; GFX13-NEXT: s_lshr_b32 s18, s0, 16
+; GFX13-NEXT: s_lshr_b32 s17, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB85_3
+; GFX13-NEXT: .LBB85_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr18
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB85_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB85_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[0:1], 1.0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-NEXT: s_branch .LBB85_6
+; GFX13-NEXT: .LBB85_5:
+; GFX13-NEXT: v_dual_mov_b32 v18, s0 :: v_dual_mov_b32 v16, s2
+; GFX13-NEXT: v_dual_mov_b32 v17, s3 :: v_dual_mov_b32 v19, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s18 :: v_dual_mov_b32 v1, s17
+; GFX13-NEXT: v_dual_mov_b32 v10, s16 :: v_dual_mov_b32 v9, s15
+; GFX13-NEXT: v_dual_mov_b32 v3, s4 :: v_dual_mov_b32 v11, s6
+; GFX13-NEXT: v_dual_mov_b32 v15, s14 :: v_dual_mov_b32 v14, s13
+; GFX13-NEXT: v_dual_mov_b32 v13, s12 :: v_dual_mov_b32 v7, s11
+; GFX13-NEXT: v_dual_mov_b32 v6, s10 :: v_dual_mov_b32 v5, s9
+; GFX13-NEXT: .LBB85_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17791,6 +21075,193 @@ define <2 x double> @bitcast_v16i8_to_v2f64(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v2f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB86_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB86_4
+; GFX13-TRUE16-NEXT: .LBB86_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB86_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-TRUE16-NEXT: .LBB86_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v2f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB86_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB86_4
+; GFX13-FAKE16-NEXT: .LBB86_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB86_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-FAKE16-NEXT: .LBB86_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18177,6 +21648,85 @@ define inreg <2 x double> @bitcast_v16i8_to_v2f64_scalar(<16 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB87_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v2f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB87_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB87_3
+; GFX13-NEXT: .LBB87_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB87_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB87_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB87_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18334,6 +21884,27 @@ define <8 x half> @bitcast_v8i16_to_v8f16(<8 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v8f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18530,6 +22101,35 @@ define inreg <8 x half> @bitcast_v8i16_to_v8f16_scalar(<8 x i16> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB89_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB89_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB89_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB89_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18670,6 +22270,27 @@ define <8 x i16> @bitcast_v8f16_to_v8i16(<8 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v8i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18865,6 +22486,35 @@ define inreg <8 x i16> @bitcast_v8f16_to_v8i16_scalar(<8 x half> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB91_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB91_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19017,6 +22667,27 @@ define <8 x bfloat> @bitcast_v8i16_to_v8bf16(<8 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v8bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19213,6 +22884,35 @@ define inreg <8 x bfloat> @bitcast_v8i16_to_v8bf16_scalar(<8 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB93_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB93_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB93_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB93_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19661,6 +23361,27 @@ define <8 x i16> @bitcast_v8bf16_to_v8i16(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB94_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v8i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20158,6 +23879,35 @@ define inreg <8 x i16> @bitcast_v8bf16_to_v8i16_scalar(<8 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB95_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB95_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20545,6 +24295,122 @@ define <16 x i8> @bitcast_v8i16_to_v16i8(<8 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i16_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB96_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB96_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB96_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v17 :: v_dual_lshrrev_b32 v15, 24, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v6, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v17 :: v_dual_lshrrev_b32 v2, 16, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB96_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i16_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB96_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB96_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB96_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB96_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20917,6 +24783,80 @@ define inreg <16 x i8> @bitcast_v8i16_to_v16i8_scalar(<8 x i16> inreg %a, i32 in
; GFX11-NEXT: v_mov_b32_e32 v8, v16
; GFX11-NEXT: v_mov_b32_e32 v12, v17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i16_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB97_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s9, s3, 24
+; GFX13-NEXT: s_lshr_b32 s10, s3, 16
+; GFX13-NEXT: s_lshr_b32 s12, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s13, s2, 8
+; GFX13-NEXT: s_lshr_b32 s14, s1, 24
+; GFX13-NEXT: s_lshr_b32 s15, s1, 16
+; GFX13-NEXT: s_lshr_b32 s17, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s18, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB97_3
+; GFX13-NEXT: .LBB97_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr18
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: .LBB97_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB97_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v19, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-NEXT: s_branch .LBB97_6
+; GFX13-NEXT: .LBB97_5:
+; GFX13-NEXT: v_dual_mov_b32 v18, s0 :: v_dual_mov_b32 v19, s1
+; GFX13-NEXT: v_dual_mov_b32 v16, s2 :: v_dual_mov_b32 v17, s3
+; GFX13-NEXT: v_dual_mov_b32 v1, s18 :: v_dual_mov_b32 v2, s16
+; GFX13-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s15
+; GFX13-NEXT: v_dual_mov_b32 v7, s14 :: v_dual_mov_b32 v9, s13
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s10 :: v_dual_mov_b32 v15, s9
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB97_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21457,6 +25397,193 @@ define <8 x i16> @bitcast_v16i8_to_v8i16(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v8i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB98_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB98_4
+; GFX13-TRUE16-NEXT: .LBB98_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB98_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-TRUE16-NEXT: .LBB98_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v8i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB98_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB98_4
+; GFX13-FAKE16-NEXT: .LBB98_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB98_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-FAKE16-NEXT: .LBB98_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21870,6 +25997,85 @@ define inreg <8 x i16> @bitcast_v16i8_to_v8i16_scalar(<16 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB99_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v8i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB99_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB99_3
+; GFX13-NEXT: .LBB99_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB99_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB99_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB99_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22038,6 +26244,27 @@ define <8 x bfloat> @bitcast_v8f16_to_v8bf16(<8 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v8bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22251,6 +26478,35 @@ define inreg <8 x bfloat> @bitcast_v8f16_to_v8bf16_scalar(<8 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB101_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB101_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22703,6 +26959,27 @@ define <8 x half> @bitcast_v8bf16_to_v8f16(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB102_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v8f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23224,6 +27501,35 @@ define inreg <8 x half> @bitcast_v8bf16_to_v8f16_scalar(<8 x bfloat> inreg %a, i
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB103_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB103_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23615,6 +27921,122 @@ define <16 x i8> @bitcast_v8f16_to_v16i8(<8 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8f16_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB104_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB104_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB104_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v17 :: v_dual_lshrrev_b32 v15, 24, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v6, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v17 :: v_dual_lshrrev_b32 v2, 16, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB104_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8f16_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB104_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB104_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB104_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB104_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24007,6 +28429,80 @@ define inreg <16 x i8> @bitcast_v8f16_to_v16i8_scalar(<8 x half> inreg %a, i32 i
; GFX11-NEXT: v_mov_b32_e32 v8, v16
; GFX11-NEXT: v_mov_b32_e32 v12, v17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f16_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB105_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s9, s3, 24
+; GFX13-NEXT: s_lshr_b32 s10, s3, 16
+; GFX13-NEXT: s_lshr_b32 s12, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s13, s2, 8
+; GFX13-NEXT: s_lshr_b32 s14, s1, 24
+; GFX13-NEXT: s_lshr_b32 s15, s1, 16
+; GFX13-NEXT: s_lshr_b32 s17, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s18, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB105_3
+; GFX13-NEXT: .LBB105_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr18
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: .LBB105_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB105_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-NEXT: s_branch .LBB105_6
+; GFX13-NEXT: .LBB105_5:
+; GFX13-NEXT: v_dual_mov_b32 v18, s0 :: v_dual_mov_b32 v19, s1
+; GFX13-NEXT: v_dual_mov_b32 v16, s2 :: v_dual_mov_b32 v17, s3
+; GFX13-NEXT: v_dual_mov_b32 v1, s18 :: v_dual_mov_b32 v2, s16
+; GFX13-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s15
+; GFX13-NEXT: v_dual_mov_b32 v7, s14 :: v_dual_mov_b32 v9, s13
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s10 :: v_dual_mov_b32 v15, s9
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB105_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24547,6 +29043,193 @@ define <8 x half> @bitcast_v16i8_to_v8f16(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v8f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB106_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB106_4
+; GFX13-TRUE16-NEXT: .LBB106_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB106_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-TRUE16-NEXT: .LBB106_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v8f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB106_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB106_4
+; GFX13-FAKE16-NEXT: .LBB106_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB106_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-FAKE16-NEXT: .LBB106_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24960,6 +29643,85 @@ define inreg <8 x half> @bitcast_v16i8_to_v8f16_scalar(<16 x i8> inreg %a, i32 i
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB107_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v8f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB107_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB107_3
+; GFX13-NEXT: .LBB107_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB107_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB107_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB107_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25614,6 +30376,122 @@ define <16 x i8> @bitcast_v8bf16_to_v16i8(<8 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v17
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8bf16_to_v16i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, v1 :: v_dual_mov_b32 v16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB108_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v17 :: v_dual_lshrrev_b32 v5, 8, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v16 :: v_dual_lshrrev_b32 v1, 8, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: .LBB108_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB108_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v17 :: v_dual_lshrrev_b32 v15, 24, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[18:19], 24, v[11:12]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[16:17]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v6, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v17 :: v_dual_lshrrev_b32 v2, 16, v16
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v16
+; GFX13-TRUE16-NEXT: .LBB108_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8bf16_to_v16i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v16, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v18, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB108_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v17 :: v_dual_lshrrev_b32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v7, 24, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v19 :: v_dual_lshrrev_b32 v5, 8, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v18 :: v_dual_lshrrev_b32 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: .LBB108_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB108_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v17, 0x40c0, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v18, 0x40c0, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-FAKE16-NEXT: .LBB108_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26350,6 +31228,80 @@ define inreg <16 x i8> @bitcast_v8bf16_to_v16i8_scalar(<8 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v17
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v12, v16
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8bf16_to_v16i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB109_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s9, s3, 24
+; GFX13-NEXT: s_lshr_b32 s10, s3, 16
+; GFX13-NEXT: s_lshr_b32 s12, s3, 8
+; GFX13-NEXT: s_lshr_b32 s11, s2, 16
+; GFX13-NEXT: s_lshr_b32 s13, s2, 8
+; GFX13-NEXT: s_lshr_b32 s14, s1, 24
+; GFX13-NEXT: s_lshr_b32 s15, s1, 16
+; GFX13-NEXT: s_lshr_b32 s17, s1, 8
+; GFX13-NEXT: s_lshr_b32 s16, s0, 16
+; GFX13-NEXT: s_lshr_b32 s18, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB109_3
+; GFX13-NEXT: .LBB109_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr18
+; GFX13-NEXT: ; implicit-def: $sgpr16
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr17
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: .LBB109_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB109_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v19, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v17, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v16, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v18, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v19 :: v_dual_lshrrev_b32 v15, 24, v17
+; GFX13-NEXT: v_lshrrev_b32_e32 v14, 16, v17
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[16:17]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[18:19]
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v17 :: v_dual_lshrrev_b32 v10, 16, v16
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v16 :: v_dual_lshrrev_b32 v6, 16, v19
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v19 :: v_dual_lshrrev_b32 v2, 16, v18
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v18
+; GFX13-NEXT: s_branch .LBB109_6
+; GFX13-NEXT: .LBB109_5:
+; GFX13-NEXT: v_dual_mov_b32 v18, s0 :: v_dual_mov_b32 v19, s1
+; GFX13-NEXT: v_dual_mov_b32 v16, s2 :: v_dual_mov_b32 v17, s3
+; GFX13-NEXT: v_dual_mov_b32 v1, s18 :: v_dual_mov_b32 v2, s16
+; GFX13-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s15
+; GFX13-NEXT: v_dual_mov_b32 v7, s14 :: v_dual_mov_b32 v9, s13
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s10 :: v_dual_mov_b32 v15, s9
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB109_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v18 :: v_dual_mov_b32 v4, v19
+; GFX13-NEXT: v_dual_mov_b32 v8, v16 :: v_dual_mov_b32 v12, v17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26892,6 +31844,193 @@ define <8 x bfloat> @bitcast_v16i8_to_v8bf16(<16 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v5
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i8_to_v8bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB110_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB110_4
+; GFX13-TRUE16-NEXT: .LBB110_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB110_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-TRUE16-NEXT: .LBB110_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.l, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i8_to_v8bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, v3 :: v_dual_mov_b32 v20, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, v1 :: v_dual_mov_b32 v19, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v16
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB110_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB110_4
+; GFX13-FAKE16-NEXT: .LBB110_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB110_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v18, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-FAKE16-NEXT: .LBB110_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v19, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v13
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v9, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v10, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v5, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v4, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27301,6 +32440,85 @@ define inreg <8 x bfloat> @bitcast_v16i8_to_v8bf16_scalar(<16 x i8> inreg %a, i3
; GFX11-NEXT: v_or_b32_e32 v3, v7, v8
; GFX11-NEXT: .LBB111_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i8_to_v8bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s28, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB111_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s26, s27, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v8, s24, s25, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_lshlrev_b32 v6, 16, v7
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v4
+; GFX13-NEXT: v_or_b32_e32 v3, v8, v6
+; GFX13-NEXT: s_branch .LBB111_3
+; GFX13-NEXT: .LBB111_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB111_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB111_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v0
+; GFX13-NEXT: v_perm_b32 v0, s26, s27, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v6 :: v_dual_lshlrev_b32 v8, 16, v0
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: .LBB111_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.160bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.160bit.ll
index 50037fb8e0a3a..ac8a472b3d017 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.160bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.160bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <5 x float> @bitcast_v5i32_to_v5f32(<5 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v5i32_to_v5f32:
@@ -75,6 +77,26 @@ define <5 x float> @bitcast_v5i32_to_v5f32(<5 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i32_to_v5f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -206,6 +228,37 @@ define inreg <5 x float> @bitcast_v5i32_to_v5f32_scalar(<5 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s16
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i32_to_v5f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s16
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -290,6 +343,26 @@ define <5 x i32> @bitcast_v5f32_to_v5i32(<5 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f32_to_v5i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -425,6 +498,37 @@ define inreg <5 x i32> @bitcast_v5f32_to_v5i32_scalar(<5 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f32_to_v5i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s16
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -544,6 +648,26 @@ define <10 x i16> @bitcast_v5i32_to_v10i16(<5 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i32_to_v10i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -705,6 +829,37 @@ define inreg <10 x i16> @bitcast_v5i32_to_v10i16_scalar(<5 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s16
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i32_to_v10i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s16
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -863,6 +1018,28 @@ define <5 x i32> @bitcast_v10i16_to_v5i32(<10 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i16_to_v5i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1057,6 +1234,38 @@ define inreg <5 x i32> @bitcast_v10i16_to_v5i32_scalar(<10 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i16_to_v5i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s5, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s5, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s5, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1176,6 +1385,26 @@ define <10 x half> @bitcast_v5i32_to_v10f16(<5 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i32_to_v10f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1337,6 +1566,37 @@ define inreg <10 x half> @bitcast_v5i32_to_v10f16_scalar(<5 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s16
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i32_to_v10f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s16
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1515,6 +1775,28 @@ define <5 x i32> @bitcast_v10f16_to_v5i32(<10 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f16_to_v5i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1728,6 +2010,38 @@ define inreg <5 x i32> @bitcast_v10f16_to_v5i32_scalar(<10 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f16_to_v5i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s5, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s5, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s5, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1845,6 +2159,26 @@ define <10 x i16> @bitcast_v5f32_to_v10i16(<5 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f32_to_v10i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2023,6 +2357,37 @@ define inreg <10 x i16> @bitcast_v5f32_to_v10i16_scalar(<5 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f32_to_v10i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s16
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2181,6 +2546,28 @@ define <5 x float> @bitcast_v10i16_to_v5f32(<10 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i16_to_v5f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2375,6 +2762,38 @@ define inreg <5 x float> @bitcast_v10i16_to_v5f32_scalar(<10 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i16_to_v5f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s5, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s5, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s5, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2492,6 +2911,26 @@ define <10 x half> @bitcast_v5f32_to_v10f16(<5 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f32_to_v10f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2670,6 +3109,37 @@ define inreg <10 x half> @bitcast_v5f32_to_v10f16_scalar(<5 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f32_to_v10f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s16
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2848,6 +3318,28 @@ define <5 x float> @bitcast_v10f16_to_v5f32(<10 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f16_to_v5f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3061,6 +3553,38 @@ define inreg <5 x float> @bitcast_v10f16_to_v5f32_scalar(<10 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_mov_b32_e32 v4, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f16_to_v5f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s5, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s5, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s5, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_mov_b32_e32 v4, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3238,6 +3762,28 @@ define <10 x half> @bitcast_v10i16_to_v10f16(<10 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i16_to_v10f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3464,6 +4010,39 @@ define inreg <10 x half> @bitcast_v10i16_to_v10f16_scalar(<10 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i16_to_v10f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB21_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3621,6 +4200,28 @@ define <10 x i16> @bitcast_v10f16_to_v10i16(<10 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f16_to_v10i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v5
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3848,6 +4449,39 @@ define inreg <10 x i16> @bitcast_v10f16_to_v10i16_scalar(<10 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f16_to_v10i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s17, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.16bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.16bit.ll
index c7cd6ebeca16e..c9ef81d6250f0 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.16bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.16bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define half @bitcast_i16_to_f16(i16 %a, i32 %b) #0 {
; SI-LABEL: bitcast_i16_to_f16:
@@ -82,6 +84,50 @@ define half @bitcast_i16_to_f16(i16 %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: ; %bb.2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_i16_to_f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB0_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v0.l, 3
+; GFX13-TRUE16-NEXT: .LBB0_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_i16_to_f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v0, 3
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -184,6 +230,31 @@ define inreg half @bitcast_i16_to_f16_scalar(i16 inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i16_to_f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -290,6 +361,50 @@ define i16 @bitcast_f16_to_i16(half %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: ; %bb.2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_f16_to_i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB2_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f16_e32 v1.l, 0x200, v0.l
+; GFX13-TRUE16-NEXT: .LBB2_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_f16_to_i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f16_e32 v0, 0x200, v0
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -421,6 +536,31 @@ define inreg i16 @bitcast_f16_to_i16_scalar(half inreg %a, i32 inreg %b) #0 {
; GFX11-FAKE16-NEXT: .LBB3_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f16_to_i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f16 s0, s0, 0x200
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -517,6 +657,50 @@ define bfloat @bitcast_i16_to_bf16(i16 %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: ; %bb.2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_i16_to_bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB4_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v0.l, 3
+; GFX13-TRUE16-NEXT: .LBB4_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_i16_to_bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v0, 3
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -623,6 +807,31 @@ define inreg bfloat @bitcast_i16_to_bf16_scalar(i16 inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i16_to_bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -769,6 +978,52 @@ define i16 @bitcast_bf16_to_i16(bfloat %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB6_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_bf16_to_i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v2, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB6_4
+; GFX13-TRUE16-NEXT: s_branch .LBB6_3
+; GFX13-TRUE16-NEXT: .LBB6_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB6_4
+; GFX13-TRUE16-NEXT: .LBB6_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v0, 0x40c0, v2
+; GFX13-TRUE16-NEXT: .LBB6_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_bf16_to_i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v0, 0x40c0, v0
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -906,6 +1161,31 @@ define inreg i16 @bitcast_bf16_to_i16_scalar(bfloat inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: .LBB7_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_bf16_to_i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1009,6 +1289,50 @@ define bfloat @bitcast_f16_to_bf16(half %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: ; %bb.2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_f16_to_bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB8_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f16_e32 v1.l, 0x200, v0.l
+; GFX13-TRUE16-NEXT: .LBB8_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_f16_to_bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f16_e32 v0, 0x200, v0
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1144,6 +1468,31 @@ define inreg bfloat @bitcast_f16_to_bf16_scalar(half inreg %a, i32 inreg %b) #0
; GFX11-FAKE16-NEXT: .LBB9_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f16_to_bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f16 s0, s0, 0x200
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1290,6 +1639,52 @@ define half @bitcast_bf16_to_f16(bfloat %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB10_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_bf16_to_f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v2, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_lo16
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB10_4
+; GFX13-TRUE16-NEXT: s_branch .LBB10_3
+; GFX13-TRUE16-NEXT: .LBB10_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB10_4
+; GFX13-TRUE16-NEXT: .LBB10_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v0, 0x40c0, v2
+; GFX13-TRUE16-NEXT: .LBB10_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_bf16_to_f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v0, 0x40c0, v0
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1427,6 +1822,31 @@ define inreg half @bitcast_bf16_to_f16_scalar(bfloat inreg %a, i32 inreg %b) #0
; GFX11-NEXT: .LBB11_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_bf16_to_f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.192bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.192bit.ll
index b017b8ea65af5..8d94281ea2331 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.192bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.192bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <6 x float> @bitcast_v6i32_to_v6f32(<6 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v6i32_to_v6f32:
@@ -79,6 +81,26 @@ define <6 x float> @bitcast_v6i32_to_v6f32(<6 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v6f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -217,6 +239,38 @@ define inreg <6 x float> @bitcast_v6i32_to_v6f32_scalar(<6 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v6f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -304,6 +358,26 @@ define <6 x i32> @bitcast_v6f32_to_v6i32(<6 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v6i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -447,6 +521,38 @@ define inreg <6 x i32> @bitcast_v6f32_to_v6i32_scalar(<6 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v6i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -537,6 +643,26 @@ define <3 x i64> @bitcast_v6i32_to_v3i64(<6 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v3i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -675,6 +801,38 @@ define inreg <3 x i64> @bitcast_v6i32_to_v3i64_scalar(<6 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v3i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -767,6 +925,31 @@ define <6 x i32> @bitcast_v3i64_to_v6i32(<3 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v6i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -905,6 +1088,35 @@ define inreg <6 x i32> @bitcast_v3i64_to_v6i32_scalar(<3 x i64> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v6i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -995,6 +1207,26 @@ define <3 x double> @bitcast_v6i32_to_v3f64(<6 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v3f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1133,6 +1365,38 @@ define inreg <3 x double> @bitcast_v6i32_to_v3f64_scalar(<6 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v3f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1214,6 +1478,27 @@ define <6 x i32> @bitcast_v3f64_to_v6i32(<3 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v6i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1345,6 +1630,37 @@ define inreg <6 x i32> @bitcast_v3f64_to_v6i32_scalar(<3 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v6i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1474,6 +1790,26 @@ define <12 x i16> @bitcast_v6i32_to_v12i16(<6 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v12i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1648,6 +1984,38 @@ define inreg <12 x i16> @bitcast_v6i32_to_v12i16_scalar(<6 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v12i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1822,6 +2190,29 @@ define <6 x i32> @bitcast_v12i16_to_v6i32(<12 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v6i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2036,6 +2427,40 @@ define inreg <6 x i32> @bitcast_v12i16_to_v6i32_scalar(<12 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v6i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2165,6 +2590,26 @@ define <12 x half> @bitcast_v6i32_to_v12f16(<6 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v12f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2339,6 +2784,38 @@ define inreg <12 x half> @bitcast_v6i32_to_v12f16_scalar(<6 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i32_to_v12f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2537,6 +3014,29 @@ define <6 x i32> @bitcast_v12f16_to_v6i32(<12 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v6i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2773,6 +3273,40 @@ define inreg <6 x i32> @bitcast_v12f16_to_v6i32_scalar(<12 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v6i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2860,6 +3394,26 @@ define <3 x i64> @bitcast_v6f32_to_v3i64(<6 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v3i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3003,6 +3557,38 @@ define inreg <3 x i64> @bitcast_v6f32_to_v3i64_scalar(<6 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v3i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3095,6 +3681,31 @@ define <6 x float> @bitcast_v3i64_to_v6f32(<3 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v6f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3233,6 +3844,35 @@ define inreg <6 x float> @bitcast_v3i64_to_v6f32_scalar(<3 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v6f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3320,6 +3960,26 @@ define <3 x double> @bitcast_v6f32_to_v3f64(<6 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v3f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3463,6 +4123,38 @@ define inreg <3 x double> @bitcast_v6f32_to_v3f64_scalar(<6 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v3f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3544,6 +4236,27 @@ define <6 x float> @bitcast_v3f64_to_v6f32(<3 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v6f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3675,6 +4388,37 @@ define inreg <6 x float> @bitcast_v3f64_to_v6f32_scalar(<3 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v6f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3801,6 +4545,26 @@ define <12 x i16> @bitcast_v6f32_to_v12i16(<6 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v12i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3992,6 +4756,38 @@ define inreg <12 x i16> @bitcast_v6f32_to_v12i16_scalar(<6 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v12i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4166,6 +4962,29 @@ define <6 x float> @bitcast_v12i16_to_v6f32(<12 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v6f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4380,6 +5199,40 @@ define inreg <6 x float> @bitcast_v12i16_to_v6f32_scalar(<12 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v6f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4506,6 +5359,26 @@ define <12 x half> @bitcast_v6f32_to_v12f16(<6 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v12f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4697,6 +5570,38 @@ define inreg <12 x half> @bitcast_v6f32_to_v12f16_scalar(<6 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f32_to_v12f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4895,6 +5800,29 @@ define <6 x float> @bitcast_v12f16_to_v6f32(<12 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v6f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5131,6 +6059,40 @@ define inreg <6 x float> @bitcast_v12f16_to_v6f32_scalar(<12 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v6f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5223,6 +6185,31 @@ define <3 x double> @bitcast_v3i64_to_v3f64(<3 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v3f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5360,6 +6347,34 @@ define inreg <3 x double> @bitcast_v3i64_to_v3f64_scalar(<3 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v3f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5441,6 +6456,27 @@ define <3 x i64> @bitcast_v3f64_to_v3i64(<3 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v3i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5572,6 +6608,37 @@ define inreg <3 x i64> @bitcast_v3f64_to_v3i64_scalar(<3 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v3i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5703,6 +6770,31 @@ define <12 x i16> @bitcast_v3i64_to_v12i16(<3 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v12i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5877,6 +6969,35 @@ define inreg <12 x i16> @bitcast_v3i64_to_v12i16_scalar(<3 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v12i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB41_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6051,6 +7172,29 @@ define <3 x i64> @bitcast_v12i16_to_v3i64(<12 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v3i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6265,6 +7409,40 @@ define inreg <3 x i64> @bitcast_v12i16_to_v3i64_scalar(<12 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v3i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6396,6 +7574,31 @@ define <12 x half> @bitcast_v3i64_to_v12f16(<3 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v12f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6570,6 +7773,35 @@ define inreg <12 x half> @bitcast_v3i64_to_v12f16_scalar(<3 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i64_to_v12f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB45_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6768,6 +8000,29 @@ define <3 x i64> @bitcast_v12f16_to_v3i64(<12 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v3i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7004,6 +8259,40 @@ define inreg <3 x i64> @bitcast_v12f16_to_v3i64_scalar(<12 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v3i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7124,6 +8413,27 @@ define <12 x i16> @bitcast_v3f64_to_v12i16(<3 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB48_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v12i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB48_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7303,6 +8613,38 @@ define inreg <12 x i16> @bitcast_v3f64_to_v12i16_scalar(<3 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v12i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB49_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB49_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7477,6 +8819,29 @@ define <3 x double> @bitcast_v12i16_to_v3f64(<12 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v3f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7691,6 +9056,40 @@ define inreg <3 x double> @bitcast_v12i16_to_v3f64_scalar(<12 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v3f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7811,6 +9210,27 @@ define <12 x half> @bitcast_v3f64_to_v12f16(<3 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB52_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v12f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB52_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7990,6 +9410,38 @@ define inreg <12 x half> @bitcast_v3f64_to_v12f16_scalar(<3 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f64_to_v12f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB53_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8188,6 +9640,29 @@ define <3 x double> @bitcast_v12f16_to_v3f64(<12 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v3f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8424,6 +9899,40 @@ define inreg <3 x double> @bitcast_v12f16_to_v3f64_scalar(<12 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v3f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8623,6 +10132,29 @@ define <12 x half> @bitcast_v12i16_to_v12f16(<12 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v12f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8875,6 +10407,41 @@ define inreg <12 x half> @bitcast_v12i16_to_v12f16_scalar(<12 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i16_to_v12f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB57_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9050,6 +10617,29 @@ define <12 x i16> @bitcast_v12f16_to_v12i16(<12 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v12i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v6
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9300,6 +10890,41 @@ define inreg <12 x i16> @bitcast_v12f16_to_v12i16_scalar(<12 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f16_to_v12i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s18, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.224bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.224bit.ll
index 95793b95e155e..59a5b706885fd 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.224bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.224bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <7 x float> @bitcast_v7i32_to_v7f32(<7 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v7i32_to_v7f32:
@@ -84,6 +86,27 @@ define <7 x float> @bitcast_v7i32_to_v7f32(<7 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i32_to_v7f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -230,6 +253,40 @@ define inreg <7 x float> @bitcast_v7i32_to_v7f32_scalar(<7 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_mov_b32_e32 v6, s18
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i32_to_v7f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_mov_b32_e32 v6, s18
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -321,6 +378,27 @@ define <7 x i32> @bitcast_v7f32_to_v7i32(<7 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f32_to_v7i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -473,6 +551,40 @@ define inreg <7 x i32> @bitcast_v7f32_to_v7i32_scalar(<7 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_mov_b32_e32 v6, s6
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f32_to_v7i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_mov_b32_e32 v6, s18
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -613,6 +725,27 @@ define <14 x i16> @bitcast_v7i32_to_v14i16(<7 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i32_to_v14i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -801,6 +934,40 @@ define inreg <14 x i16> @bitcast_v7i32_to_v14i16_scalar(<7 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_mov_b32_e32 v6, s18
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i32_to_v14i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_mov_b32_e32 v6, s18
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -992,6 +1159,31 @@ define <7 x i32> @bitcast_v14i16_to_v7i32(<14 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i16_to_v7i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1227,6 +1419,43 @@ define inreg <7 x i32> @bitcast_v14i16_to_v7i32_scalar(<14 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_mov_b32_e32 v6, s6
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i16_to_v7i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s7, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s7, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s7, s7, exec_lo
+; GFX13-NEXT: s_cselect_b32 s7, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s7, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_mov_b32_e32 v6, s6
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1367,6 +1596,27 @@ define <14 x half> @bitcast_v7i32_to_v14f16(<7 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i32_to_v14f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1555,6 +1805,40 @@ define inreg <14 x half> @bitcast_v7i32_to_v14f16_scalar(<7 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_mov_b32_e32 v6, s18
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i32_to_v14f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_mov_b32_e32 v6, s18
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1774,6 +2058,31 @@ define <7 x i32> @bitcast_v14f16_to_v7i32(<14 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f16_to_v7i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2034,6 +2343,43 @@ define inreg <7 x i32> @bitcast_v14f16_to_v7i32_scalar(<14 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_mov_b32_e32 v6, s6
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f16_to_v7i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s7, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s7, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s7, s7, exec_lo
+; GFX13-NEXT: s_cselect_b32 s7, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s7, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_mov_b32_e32 v6, s6
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2170,6 +2516,27 @@ define <14 x i16> @bitcast_v7f32_to_v14i16(<7 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f32_to_v14i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2374,6 +2741,40 @@ define inreg <14 x i16> @bitcast_v7f32_to_v14i16_scalar(<7 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f32_to_v14i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_mov_b32_e32 v6, s18
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2565,6 +2966,31 @@ define <7 x float> @bitcast_v14i16_to_v7f32(<14 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB14_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i16_to_v7f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB14_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2800,6 +3226,43 @@ define inreg <7 x float> @bitcast_v14i16_to_v7f32_scalar(<14 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_mov_b32_e32 v6, s6
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i16_to_v7f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s7, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s7, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s7, s7, exec_lo
+; GFX13-NEXT: s_cselect_b32 s7, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s7, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_mov_b32_e32 v6, s6
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2936,6 +3399,27 @@ define <14 x half> @bitcast_v7f32_to_v14f16(<7 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f32_to_v14f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3140,6 +3624,40 @@ define inreg <14 x half> @bitcast_v7f32_to_v14f16_scalar(<7 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f32_to_v14f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_mov_b32_e32 v6, s18
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3359,6 +3877,31 @@ define <7 x float> @bitcast_v14f16_to_v7f32(<14 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f16_to_v7f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3619,6 +4162,43 @@ define inreg <7 x float> @bitcast_v14f16_to_v7f32_scalar(<14 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_mov_b32_e32 v6, s6
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f16_to_v7f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s7, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s7, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s7, s7, exec_lo
+; GFX13-NEXT: s_cselect_b32 s7, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s7, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_mov_b32_e32 v6, s6
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3839,6 +4419,31 @@ define <14 x half> @bitcast_v14i16_to_v14f16(<14 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i16_to_v14f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4115,6 +4720,43 @@ define inreg <14 x half> @bitcast_v14i16_to_v14f16_scalar(<14 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i16_to_v14f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB21_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4308,6 +4950,31 @@ define <14 x i16> @bitcast_v14f16_to_v14i16(<14 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f16_to_v14i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v7
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4580,6 +5247,43 @@ define inreg <14 x i16> @bitcast_v14f16_to_v14i16_scalar(<14 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f16_to_v14i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s19, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.256bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.256bit.ll
index 24cebc1097205..ece43872c82d5 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.256bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.256bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <8 x float> @bitcast_v8i32_to_v8f32(<8 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v8i32_to_v8f32:
@@ -88,6 +90,27 @@ define <8 x float> @bitcast_v8i32_to_v8f32(<8 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v8f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -241,6 +264,41 @@ define inreg <8 x float> @bitcast_v8i32_to_v8f32_scalar(<8 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -335,6 +393,27 @@ define <8 x i32> @bitcast_v8f32_to_v8i32(<8 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v8i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -495,6 +574,41 @@ define inreg <8 x i32> @bitcast_v8f32_to_v8i32_scalar(<8 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -594,6 +708,27 @@ define <4 x i64> @bitcast_v8i32_to_v4i64(<8 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v4i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -747,6 +882,41 @@ define inreg <4 x i64> @bitcast_v8i32_to_v4i64_scalar(<8 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -848,6 +1018,34 @@ define <8 x i32> @bitcast_v4i64_to_v8i32(<4 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v8i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1001,6 +1199,37 @@ define inreg <8 x i32> @bitcast_v4i64_to_v8i32_scalar(<4 x i64> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1100,6 +1329,27 @@ define <4 x double> @bitcast_v8i32_to_v4f64(<8 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v4f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1253,6 +1503,41 @@ define inreg <4 x double> @bitcast_v8i32_to_v4f64_scalar(<8 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1338,6 +1623,28 @@ define <8 x i32> @bitcast_v4f64_to_v8i32(<4 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v8i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1482,6 +1789,41 @@ define inreg <8 x i32> @bitcast_v4f64_to_v8i32_scalar(<4 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[6:7], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1632,6 +1974,27 @@ define <16 x i16> @bitcast_v8i32_to_v16i16(<8 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB12_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v16i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1833,6 +2196,41 @@ define inreg <16 x i16> @bitcast_v8i32_to_v16i16_scalar(<8 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v16i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2040,6 +2438,32 @@ define <8 x i32> @bitcast_v16i16_to_v8i32(<16 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB14_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v8i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB14_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2295,6 +2719,45 @@ define inreg <8 x i32> @bitcast_v16i16_to_v8i32_scalar(<16 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2445,6 +2908,27 @@ define <16 x half> @bitcast_v8i32_to_v16f16(<8 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB16_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v16f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2646,6 +3130,41 @@ define inreg <16 x half> @bitcast_v8i32_to_v16f16_scalar(<8 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v16f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2885,6 +3404,32 @@ define <8 x i32> @bitcast_v16f16_to_v8i32(<16 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v8i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3168,6 +3713,45 @@ define inreg <8 x i32> @bitcast_v16f16_to_v8i32_scalar(<16 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3359,6 +3943,27 @@ define <16 x bfloat> @bitcast_v8i32_to_v16bf16(<8 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v16bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3584,6 +4189,41 @@ define inreg <16 x bfloat> @bitcast_v8i32_to_v16bf16_scalar(<8 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v16bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4331,6 +4971,32 @@ define <8 x i32> @bitcast_v16bf16_to_v8i32(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB22_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v8i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5206,6 +5872,45 @@ define inreg <8 x i32> @bitcast_v16bf16_to_v8i32_scalar(<16 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5765,6 +6470,185 @@ define <32 x i8> @bitcast_v8i32_to_v32i8(<8 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i32_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB24_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB24_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v27, 3, v27
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v28, 3, v28 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v12 :: v_dual_add_nc_u32 v19, 3, v19
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v20, 3, v20 :: v_dual_add_nc_u32 v11, 3, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB24_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i32_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB24_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB24_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v39, 3, v39 :: v_dual_add_nc_u32 v37, 3, v37
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v35, 3, v35 :: v_dual_add_nc_u32 v33, 3, v33
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v32, 3, v32 :: v_dual_add_nc_u32 v34, 3, v34
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v36, 3, v36 :: v_dual_add_nc_u32 v38, 3, v38
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB24_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6292,6 +7176,127 @@ define inreg <32 x i8> @bitcast_v8i32_to_v32i8_scalar(<8 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v28, s19 :: v_dual_mov_b32 v29, s14
; GFX11-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i32_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB25_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s19, 24
+; GFX13-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s20, s18, 8
+; GFX13-NEXT: s_lshr_b32 s21, s17, 24
+; GFX13-NEXT: s_lshr_b32 s22, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s25, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s27, s3, 16
+; GFX13-NEXT: s_lshr_b32 s28, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s40, s2, 8
+; GFX13-NEXT: s_lshr_b32 s41, s1, 24
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB25_3
+; GFX13-NEXT: .LBB25_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB25_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s12, s19, 24
+; GFX13-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s20, s18, 8
+; GFX13-NEXT: s_lshr_b32 s21, s17, 24
+; GFX13-NEXT: s_lshr_b32 s22, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s25, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s27, s3, 16
+; GFX13-NEXT: s_lshr_b32 s28, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s40, s2, 8
+; GFX13-NEXT: s_lshr_b32 s41, s1, 24
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: .LBB25_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s45
+; GFX13-NEXT: v_dual_mov_b32 v2, s44 :: v_dual_mov_b32 v3, s10
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s43
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s41
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s40
+; GFX13-NEXT: v_dual_mov_b32 v10, s29 :: v_dual_mov_b32 v11, s8
+; GFX13-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s28
+; GFX13-NEXT: v_dual_mov_b32 v14, s27 :: v_dual_mov_b32 v15, s26
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s25
+; GFX13-NEXT: v_dual_mov_b32 v18, s24 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s17 :: v_dual_mov_b32 v21, s23
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s21
+; GFX13-NEXT: v_dual_mov_b32 v24, s18 :: v_dual_mov_b32 v25, s20
+; GFX13-NEXT: v_dual_mov_b32 v26, s15 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: v_dual_mov_b32 v28, s19 :: v_dual_mov_b32 v29, s14
+; GFX13-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7227,6 +8232,339 @@ define <8 x i32> @bitcast_v32i8_to_v8i32(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v10
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v8i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v48, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v37.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v38.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v39.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v48
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB26_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB26_4
+; GFX13-TRUE16-NEXT: .LBB26_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB26_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v30, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-TRUE16-NEXT: .LBB26_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v34.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v8i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB26_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB26_4
+; GFX13-FAKE16-NEXT: .LBB26_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB26_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v30, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-FAKE16-NEXT: .LBB26_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v34, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v36, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v32, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v19
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v13, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v14, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7941,6 +9279,153 @@ define inreg <8 x i32> @bitcast_v32i8_to_v8i32_scalar(<32 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v7, v12, v13
; GFX11-NEXT: .LBB27_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i8_to_v8i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB27_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v5, s22, s23, v3
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v11, s5, s4, v3
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v2, v6, v5 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v8
+; GFX13-NEXT: v_perm_b32 v6, s13, s12, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v9
+; GFX13-NEXT: v_perm_b32 v9, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v5, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_perm_b32 v13, s7, s6, v3
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v4
+; GFX13-NEXT: v_or_b32_e32 v4, v5, v8
+; GFX13-NEXT: v_or_b32_e32 v5, v10, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v12, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v13, v11
+; GFX13-NEXT: s_branch .LBB27_3
+; GFX13-NEXT: .LBB27_2:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-NEXT: .LBB27_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v9, s13, s12, v3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_perm_b32 v8, s15, s14, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: v_perm_b32 v4, s24, s25, v3
+; GFX13-NEXT: v_perm_b32 v10, s11, s10, v3
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v12, s7, s6, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_perm_b32 v5, s26, s27, v3
+; GFX13-NEXT: v_perm_b32 v6, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v3, s5, s4, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v3 :: v_dual_bitop2_b32 v3, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v7
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v6, v10, v11
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v13
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8035,6 +9520,27 @@ define <4 x i64> @bitcast_v8f32_to_v4i64(<8 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v4i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8195,6 +9701,41 @@ define inreg <4 x i64> @bitcast_v8f32_to_v4i64_scalar(<8 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8296,6 +9837,34 @@ define <8 x float> @bitcast_v4i64_to_v8f32(<4 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB30_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v8f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB30_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8449,6 +10018,37 @@ define inreg <8 x float> @bitcast_v4i64_to_v8f32_scalar(<4 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB31_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8543,6 +10143,27 @@ define <4 x double> @bitcast_v8f32_to_v4f64(<8 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v4f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8703,6 +10324,41 @@ define inreg <4 x double> @bitcast_v8f32_to_v4f64_scalar(<8 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8788,6 +10444,28 @@ define <8 x float> @bitcast_v4f64_to_v8f32(<4 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB34_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v8f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB34_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8932,6 +10610,41 @@ define inreg <8 x float> @bitcast_v4f64_to_v8f32_scalar(<4 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[6:7], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9077,6 +10790,27 @@ define <16 x i16> @bitcast_v8f32_to_v16i16(<8 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v16i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9294,6 +11028,41 @@ define inreg <16 x i16> @bitcast_v8f32_to_v16i16_scalar(<8 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v16i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9501,6 +11270,32 @@ define <8 x float> @bitcast_v16i16_to_v8f32(<16 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v8f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9756,6 +11551,45 @@ define inreg <8 x float> @bitcast_v16i16_to_v8f32_scalar(<16 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9901,6 +11735,27 @@ define <16 x half> @bitcast_v8f32_to_v16f16(<8 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v16f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10118,6 +11973,41 @@ define inreg <16 x half> @bitcast_v8f32_to_v16f16_scalar(<8 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v16f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB41_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10357,6 +12247,32 @@ define <8 x float> @bitcast_v16f16_to_v8f32(<16 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB42_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v8f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB42_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10640,6 +12556,45 @@ define inreg <8 x float> @bitcast_v16f16_to_v8f32_scalar(<16 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10826,6 +12781,27 @@ define <16 x bfloat> @bitcast_v8f32_to_v16bf16(<8 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v16bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11075,6 +13051,41 @@ define inreg <16 x bfloat> @bitcast_v8f32_to_v16bf16_scalar(<8 x float> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v16bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB45_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11822,6 +13833,32 @@ define <8 x float> @bitcast_v16bf16_to_v8f32(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v8f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB46_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12697,6 +14734,45 @@ define inreg <8 x float> @bitcast_v16bf16_to_v8f32_scalar(<16 x bfloat> inreg %a
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13251,6 +15327,185 @@ define <32 x i8> @bitcast_v8f32_to_v32i8(<8 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8f32_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v27, 1.0, v27
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v28, 1.0, v28 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v12, 1.0, v12 :: v_dual_add_f32 v19, 1.0, v19
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v20, 1.0, v20 :: v_dual_add_f32 v11, 1.0, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8f32_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v39, 1.0, v39 :: v_dual_add_f32 v37, 1.0, v37
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v35, 1.0, v35 :: v_dual_add_f32 v33, 1.0, v33
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v32, 1.0, v32 :: v_dual_add_f32 v34, 1.0, v34
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v36, 1.0, v36 :: v_dual_add_f32 v38, 1.0, v38
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13825,6 +16080,127 @@ define inreg <32 x i8> @bitcast_v8f32_to_v32i8_scalar(<8 x float> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v24, v32
; GFX11-NEXT: v_mov_b32_e32 v28, v33
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8f32_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s19, 24
+; GFX13-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s20, s18, 8
+; GFX13-NEXT: s_lshr_b32 s21, s17, 24
+; GFX13-NEXT: s_lshr_b32 s22, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s25, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s27, s3, 16
+; GFX13-NEXT: s_lshr_b32 s28, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s40, s2, 8
+; GFX13-NEXT: s_lshr_b32 s41, s1, 24
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB49_3
+; GFX13-NEXT: .LBB49_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB49_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s12, s19, 24
+; GFX13-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s20, s18, 8
+; GFX13-NEXT: s_lshr_b32 s21, s17, 24
+; GFX13-NEXT: s_lshr_b32 s22, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s25, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s27, s3, 16
+; GFX13-NEXT: s_lshr_b32 s28, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s40, s2, 8
+; GFX13-NEXT: s_lshr_b32 s41, s1, 24
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: .LBB49_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s45
+; GFX13-NEXT: v_dual_mov_b32 v2, s44 :: v_dual_mov_b32 v3, s10
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s43
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s41
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s40
+; GFX13-NEXT: v_dual_mov_b32 v10, s29 :: v_dual_mov_b32 v11, s8
+; GFX13-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s28
+; GFX13-NEXT: v_dual_mov_b32 v14, s27 :: v_dual_mov_b32 v15, s26
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s25
+; GFX13-NEXT: v_dual_mov_b32 v18, s24 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s17 :: v_dual_mov_b32 v21, s23
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s21
+; GFX13-NEXT: v_dual_mov_b32 v24, s18 :: v_dual_mov_b32 v25, s20
+; GFX13-NEXT: v_dual_mov_b32 v26, s15 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: v_dual_mov_b32 v28, s19 :: v_dual_mov_b32 v29, s14
+; GFX13-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14760,6 +17136,339 @@ define <8 x float> @bitcast_v32i8_to_v8f32(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v10
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v8f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v48, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v37.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v38.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v39.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v48
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v30, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v34.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v8f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v30, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v34, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v36, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v32, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v19
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v13, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v14, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15474,6 +18183,153 @@ define inreg <8 x float> @bitcast_v32i8_to_v8f32_scalar(<32 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v7, v12, v13
; GFX11-NEXT: .LBB51_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i8_to_v8f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB51_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v5, s22, s23, v3
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v11, s5, s4, v3
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v2, v6, v5 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v8
+; GFX13-NEXT: v_perm_b32 v6, s13, s12, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v9
+; GFX13-NEXT: v_perm_b32 v9, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v5, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_perm_b32 v13, s7, s6, v3
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v4
+; GFX13-NEXT: v_or_b32_e32 v4, v5, v8
+; GFX13-NEXT: v_or_b32_e32 v5, v10, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v12, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v13, v11
+; GFX13-NEXT: s_branch .LBB51_3
+; GFX13-NEXT: .LBB51_2:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-NEXT: .LBB51_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v9, s13, s12, v3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_perm_b32 v8, s15, s14, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: v_perm_b32 v4, s24, s25, v3
+; GFX13-NEXT: v_perm_b32 v10, s11, s10, v3
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v12, s7, s6, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_perm_b32 v5, s26, s27, v3
+; GFX13-NEXT: v_perm_b32 v6, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v3, s5, s4, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v3 :: v_dual_bitop2_b32 v3, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v7
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v6, v10, v11
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v13
+; GFX13-NEXT: .LBB51_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15575,6 +18431,34 @@ define <4 x double> @bitcast_v4i64_to_v4f64(<4 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB52_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v4f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: .LBB52_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15727,6 +18611,36 @@ define inreg <4 x double> @bitcast_v4i64_to_v4f64_scalar(<4 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: .LBB53_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15812,6 +18726,28 @@ define <4 x i64> @bitcast_v4f64_to_v4i64(<4 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB54_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v4i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: .LBB54_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15956,6 +18892,41 @@ define inreg <4 x i64> @bitcast_v4f64_to_v4i64_scalar(<4 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[6:7], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16108,6 +19079,34 @@ define <16 x i16> @bitcast_v4i64_to_v16i16(<4 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB56_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v16i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB56_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16309,6 +19308,37 @@ define inreg <16 x i16> @bitcast_v4i64_to_v16i16_scalar(<4 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v16i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB57_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16516,6 +19546,32 @@ define <4 x i64> @bitcast_v16i16_to_v4i64(<16 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB58_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v4i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB58_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16771,6 +19827,45 @@ define inreg <4 x i64> @bitcast_v16i16_to_v4i64_scalar(<16 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16923,6 +20018,34 @@ define <16 x half> @bitcast_v4i64_to_v16f16(<4 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB60_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v16f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB60_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB60_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17124,6 +20247,37 @@ define inreg <16 x half> @bitcast_v4i64_to_v16f16_scalar(<4 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v16f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB61_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB61_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17363,6 +20517,32 @@ define <4 x i64> @bitcast_v16f16_to_v4i64(<16 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB62_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v4i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB62_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB62_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17646,6 +20826,45 @@ define inreg <4 x i64> @bitcast_v16f16_to_v4i64_scalar(<16 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB63_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB63_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17839,6 +21058,34 @@ define <16 x bfloat> @bitcast_v4i64_to_v16bf16(<4 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB64_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v16bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB64_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB64_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18064,6 +21311,37 @@ define inreg <16 x bfloat> @bitcast_v4i64_to_v16bf16_scalar(<4 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v16bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB65_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB65_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18811,6 +22089,32 @@ define <4 x i64> @bitcast_v16bf16_to_v4i64(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB66_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v4i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB66_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB66_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19686,6 +22990,45 @@ define inreg <4 x i64> @bitcast_v16bf16_to_v4i64_scalar(<16 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB67_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB67_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20251,6 +23594,195 @@ define <32 x i8> @bitcast_v4i64_to_v32i8(<4 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i64_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB68_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB68_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v11, vcc_lo, v11, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v12, null, 0, v12, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v19, vcc_lo, v19, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v20, null, 0, v20, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v27, vcc_lo, v27, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v28, null, 0, v28, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, v3, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v4, null, 0, v4, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB68_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i64_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB68_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB68_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v36, vcc_lo, v36, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v37, null, 0, v37, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v34, vcc_lo, v34, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v35, null, 0, v35, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v32, vcc_lo, v32, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v33, null, 0, v33, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v38, vcc_lo, v38, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v39, null, 0, v39, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB68_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20778,6 +24310,123 @@ define inreg <32 x i8> @bitcast_v4i64_to_v32i8_scalar(<4 x i64> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v28, s19 :: v_dual_mov_b32 v29, s14
; GFX11-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i64_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB69_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s19, 24
+; GFX13-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s20, s18, 8
+; GFX13-NEXT: s_lshr_b32 s21, s17, 24
+; GFX13-NEXT: s_lshr_b32 s22, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s25, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s27, s3, 16
+; GFX13-NEXT: s_lshr_b32 s28, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s40, s2, 8
+; GFX13-NEXT: s_lshr_b32 s41, s1, 24
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB69_3
+; GFX13-NEXT: .LBB69_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB69_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s12, s19, 24
+; GFX13-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s20, s18, 8
+; GFX13-NEXT: s_lshr_b32 s21, s17, 24
+; GFX13-NEXT: s_lshr_b32 s22, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s25, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s27, s3, 16
+; GFX13-NEXT: s_lshr_b32 s28, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s40, s2, 8
+; GFX13-NEXT: s_lshr_b32 s41, s1, 24
+; GFX13-NEXT: s_lshr_b32 s42, s1, 16
+; GFX13-NEXT: s_lshr_b32 s43, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: .LBB69_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s45
+; GFX13-NEXT: v_dual_mov_b32 v2, s44 :: v_dual_mov_b32 v3, s10
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s43
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s41
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s40
+; GFX13-NEXT: v_dual_mov_b32 v10, s29 :: v_dual_mov_b32 v11, s8
+; GFX13-NEXT: v_dual_mov_b32 v12, s3 :: v_dual_mov_b32 v13, s28
+; GFX13-NEXT: v_dual_mov_b32 v14, s27 :: v_dual_mov_b32 v15, s26
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s25
+; GFX13-NEXT: v_dual_mov_b32 v18, s24 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s17 :: v_dual_mov_b32 v21, s23
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s21
+; GFX13-NEXT: v_dual_mov_b32 v24, s18 :: v_dual_mov_b32 v25, s20
+; GFX13-NEXT: v_dual_mov_b32 v26, s15 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: v_dual_mov_b32 v28, s19 :: v_dual_mov_b32 v29, s14
+; GFX13-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21713,6 +25362,339 @@ define <4 x i64> @bitcast_v32i8_to_v4i64(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v10
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v4i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v48, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v37.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v38.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v39.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v48
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-TRUE16-NEXT: .LBB70_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v30, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-TRUE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v34.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v4i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-FAKE16-NEXT: .LBB70_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v30, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-FAKE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v34, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v36, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v32, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v19
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v13, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v14, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22427,6 +26409,153 @@ define inreg <4 x i64> @bitcast_v32i8_to_v4i64_scalar(<32 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v7, v12, v13
; GFX11-NEXT: .LBB71_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i8_to_v4i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB71_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v5, s22, s23, v3
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v11, s5, s4, v3
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v2, v6, v5 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v8
+; GFX13-NEXT: v_perm_b32 v6, s13, s12, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v9
+; GFX13-NEXT: v_perm_b32 v9, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v5, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_perm_b32 v13, s7, s6, v3
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v4
+; GFX13-NEXT: v_or_b32_e32 v4, v5, v8
+; GFX13-NEXT: v_or_b32_e32 v5, v10, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v12, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v13, v11
+; GFX13-NEXT: s_branch .LBB71_3
+; GFX13-NEXT: .LBB71_2:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-NEXT: .LBB71_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v9, s13, s12, v3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_perm_b32 v8, s15, s14, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: v_perm_b32 v4, s24, s25, v3
+; GFX13-NEXT: v_perm_b32 v10, s11, s10, v3
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v12, s7, s6, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_perm_b32 v5, s26, s27, v3
+; GFX13-NEXT: v_perm_b32 v6, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v3, s5, s4, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v3 :: v_dual_bitop2_b32 v3, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v7
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v6, v10, v11
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v13
+; GFX13-NEXT: .LBB71_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22563,6 +26692,28 @@ define <16 x i16> @bitcast_v4f64_to_v16i16(<4 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB72_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v16i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB72_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB72_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22764,6 +26915,41 @@ define inreg <16 x i16> @bitcast_v4f64_to_v16i16_scalar(<4 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v16i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB73_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[6:7], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB73_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22971,6 +27157,32 @@ define <4 x double> @bitcast_v16i16_to_v4f64(<16 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB74_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v4f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB74_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB74_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23226,6 +27438,45 @@ define inreg <4 x double> @bitcast_v16i16_to_v4f64_scalar(<16 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB75_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB75_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23362,6 +27613,28 @@ define <16 x half> @bitcast_v4f64_to_v16f16(<4 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB76_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v16f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB76_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23563,6 +27836,41 @@ define inreg <16 x half> @bitcast_v4f64_to_v16f16_scalar(<4 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v16f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB77_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[6:7], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB77_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23802,6 +28110,32 @@ define <4 x double> @bitcast_v16f16_to_v4f64(<16 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB78_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v4f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB78_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB78_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24085,6 +28419,45 @@ define inreg <4 x double> @bitcast_v16f16_to_v4f64_scalar(<16 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB79_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB79_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24258,6 +28631,28 @@ define <16 x bfloat> @bitcast_v4f64_to_v16bf16(<4 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB80_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v16bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB80_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB80_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24491,6 +28886,41 @@ define inreg <16 x bfloat> @bitcast_v4f64_to_v16bf16_scalar(<4 x double> inreg %
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v16bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB81_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[6:7], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[4:5], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB81_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25238,6 +29668,32 @@ define <4 x double> @bitcast_v16bf16_to_v4f64(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB82_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v4f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB82_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB82_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26113,6 +30569,45 @@ define inreg <4 x double> @bitcast_v16bf16_to_v4f64_scalar(<16 x bfloat> inreg %
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB83_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB83_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26662,6 +31157,185 @@ define <32 x i8> @bitcast_v4f64_to_v32i8(<4 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4f64_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB84_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB84_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB84_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[27:28], 1.0, v[27:28]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[19:20], 1.0, v[19:20]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[11:12], 1.0, v[11:12]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[3:4], 1.0, v[3:4]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB84_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4f64_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB84_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB84_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB84_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[32:33], 1.0, v[32:33]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[34:35], 1.0, v[34:35]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[36:37], 1.0, v[36:37]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[38:39], 1.0, v[38:39]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB84_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27222,6 +31896,120 @@ define inreg <32 x i8> @bitcast_v4f64_to_v32i8_scalar(<4 x double> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v24, v32
; GFX11-NEXT: v_mov_b32_e32 v28, v33
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f64_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB85_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s28, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s26, s19, 8
+; GFX13-NEXT: s_lshr_b32 s40, s18, 16
+; GFX13-NEXT: s_lshr_b32 s29, s18, 8
+; GFX13-NEXT: s_lshr_b32 s25, s17, 24
+; GFX13-NEXT: s_lshr_b32 s24, s17, 16
+; GFX13-NEXT: s_lshr_b32 s23, s17, 8
+; GFX13-NEXT: s_lshr_b32 s42, s16, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 8
+; GFX13-NEXT: s_lshr_b32 s22, s3, 24
+; GFX13-NEXT: s_lshr_b32 s21, s3, 16
+; GFX13-NEXT: s_lshr_b32 s20, s3, 8
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 8
+; GFX13-NEXT: s_lshr_b32 s15, s1, 24
+; GFX13-NEXT: s_lshr_b32 s14, s1, 16
+; GFX13-NEXT: s_lshr_b32 s13, s1, 8
+; GFX13-NEXT: s_lshr_b32 s46, s0, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB85_3
+; GFX13-NEXT: .LBB85_2:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: .LBB85_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB85_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[32:33], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[34:35], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[36:37], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[38:39], s[0:1], 1.0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-NEXT: s_branch .LBB85_6
+; GFX13-NEXT: .LBB85_5:
+; GFX13-NEXT: v_dual_mov_b32 v38, s0 :: v_dual_mov_b32 v36, s2
+; GFX13-NEXT: v_dual_mov_b32 v34, s16 :: v_dual_mov_b32 v32, s18
+; GFX13-NEXT: v_dual_mov_b32 v33, s19 :: v_dual_mov_b32 v35, s17
+; GFX13-NEXT: v_dual_mov_b32 v37, s3 :: v_dual_mov_b32 v39, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s46 :: v_dual_mov_b32 v1, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s44 :: v_dual_mov_b32 v9, s43
+; GFX13-NEXT: v_dual_mov_b32 v18, s42 :: v_dual_mov_b32 v17, s41
+; GFX13-NEXT: v_dual_mov_b32 v26, s40 :: v_dual_mov_b32 v25, s29
+; GFX13-NEXT: v_dual_mov_b32 v3, s4 :: v_dual_mov_b32 v11, s6
+; GFX13-NEXT: v_dual_mov_b32 v19, s8 :: v_dual_mov_b32 v27, s10
+; GFX13-NEXT: v_dual_mov_b32 v31, s28 :: v_dual_mov_b32 v30, s27
+; GFX13-NEXT: v_dual_mov_b32 v29, s26 :: v_dual_mov_b32 v23, s25
+; GFX13-NEXT: v_dual_mov_b32 v22, s24 :: v_dual_mov_b32 v21, s23
+; GFX13-NEXT: v_dual_mov_b32 v15, s22 :: v_dual_mov_b32 v14, s21
+; GFX13-NEXT: v_dual_mov_b32 v13, s20 :: v_dual_mov_b32 v7, s15
+; GFX13-NEXT: v_dual_mov_b32 v6, s14 :: v_dual_mov_b32 v5, s13
+; GFX13-NEXT: .LBB85_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28157,6 +32945,339 @@ define <4 x double> @bitcast_v32i8_to_v4f64(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v10
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v4f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v48, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v37.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v38.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v39.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v48
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB86_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB86_4
+; GFX13-TRUE16-NEXT: .LBB86_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB86_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v39, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v37, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v35, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v30, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-TRUE16-NEXT: .LBB86_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v38.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v37.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v36.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v35.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v33.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v34.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v32.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v29.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v4f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v39, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB86_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB86_4
+; GFX13-FAKE16-NEXT: .LBB86_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB86_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v34, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v30, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v4, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-FAKE16-NEXT: .LBB86_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v34, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v36, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v32, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v8, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v21
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v19
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v9, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v12, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v13, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v14, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v11
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28871,6 +33992,153 @@ define inreg <4 x double> @bitcast_v32i8_to_v4f64_scalar(<32 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v7, v12, v13
; GFX11-NEXT: .LBB87_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v32i8_to_v4f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-NEXT: v_readfirstlane_b32 s5, v12
+; GFX13-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-NEXT: v_readfirstlane_b32 s7, v10
+; GFX13-NEXT: v_readfirstlane_b32 s8, v9
+; GFX13-NEXT: v_readfirstlane_b32 s9, v8
+; GFX13-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-NEXT: v_readfirstlane_b32 s11, v6
+; GFX13-NEXT: v_readfirstlane_b32 s12, v5
+; GFX13-NEXT: v_readfirstlane_b32 s13, v4
+; GFX13-NEXT: v_readfirstlane_b32 s14, v3
+; GFX13-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-NEXT: v_readfirstlane_b32 s40, v1
+; GFX13-NEXT: v_readfirstlane_b32 s41, v0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-NEXT: s_mov_b32 s42, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB87_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v5, s22, s23, v3
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v11, s5, s4, v3
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v2, v6, v5 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v8
+; GFX13-NEXT: v_perm_b32 v6, s13, s12, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v9
+; GFX13-NEXT: v_perm_b32 v9, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v5, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_perm_b32 v13, s7, s6, v3
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v4
+; GFX13-NEXT: v_or_b32_e32 v4, v5, v8
+; GFX13-NEXT: v_or_b32_e32 v5, v10, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v12, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v13, v11
+; GFX13-NEXT: s_branch .LBB87_3
+; GFX13-NEXT: .LBB87_2:
+; GFX13-NEXT: s_mov_b32 s42, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-NEXT: .LBB87_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB87_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v3, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v3
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v3
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v3
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v3
+; GFX13-NEXT: v_perm_b32 v9, s13, s12, v3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_perm_b32 v8, s15, s14, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v4
+; GFX13-NEXT: v_perm_b32 v4, s24, s25, v3
+; GFX13-NEXT: v_perm_b32 v10, s11, s10, v3
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v3
+; GFX13-NEXT: v_perm_b32 v12, s7, s6, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: v_perm_b32 v5, s26, s27, v3
+; GFX13-NEXT: v_perm_b32 v6, s28, s29, v3
+; GFX13-NEXT: v_perm_b32 v3, s5, s4, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_dual_lshlrev_b32 v13, 16, v3 :: v_dual_bitop2_b32 v3, v4, v5 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v4, v6, v7
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v6, v10, v11
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v13
+; GFX13-NEXT: .LBB87_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29113,6 +34381,32 @@ define <16 x half> @bitcast_v16i16_to_v16f16(<16 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB88_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v16f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB88_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB88_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29415,6 +34709,45 @@ define inreg <16 x half> @bitcast_v16i16_to_v16f16_scalar(<16 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v16f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB89_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB89_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB89_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB89_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29626,6 +34959,32 @@ define <16 x i16> @bitcast_v16f16_to_v16i16(<16 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB90_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v16i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB90_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB90_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29921,6 +35280,45 @@ define inreg <16 x i16> @bitcast_v16f16_to_v16i16_scalar(<16 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v16i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB91_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB91_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30154,6 +35552,32 @@ define <16 x bfloat> @bitcast_v16i16_to_v16bf16(<16 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB92_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v16bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB92_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB92_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30456,6 +35880,45 @@ define inreg <16 x bfloat> @bitcast_v16i16_to_v16bf16_scalar(<16 x i16> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v16bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB93_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB93_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB93_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB93_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31249,6 +36712,32 @@ define <16 x i16> @bitcast_v16bf16_to_v16i16(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB94_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v16i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB94_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB94_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32115,6 +37604,45 @@ define inreg <16 x i16> @bitcast_v16bf16_to_v16i16_scalar(<16 x bfloat> inreg %a
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v16i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB95_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB95_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32777,6 +38305,189 @@ define <32 x i8> @bitcast_v16i16_to_v32i8(<16 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16i16_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB96_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB96_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB96_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB96_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16i16_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB96_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB96_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB96_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v39, v39, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v37, v37, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v35, v35, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v33, v33, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v32, v32, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v34, v34, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v36, v36, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v38, v38, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB96_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33419,6 +39130,122 @@ define inreg <32 x i8> @bitcast_v16i16_to_v32i8_scalar(<16 x i16> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v24, v32
; GFX11-NEXT: v_mov_b32_e32 v28, v33
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16i16_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB97_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s13, s19, 24
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s20, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s21, s18, 8
+; GFX13-NEXT: s_lshr_b32 s22, s17, 24
+; GFX13-NEXT: s_lshr_b32 s23, s17, 16
+; GFX13-NEXT: s_lshr_b32 s25, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s26, s16, 8
+; GFX13-NEXT: s_lshr_b32 s27, s3, 24
+; GFX13-NEXT: s_lshr_b32 s28, s3, 16
+; GFX13-NEXT: s_lshr_b32 s40, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s41, s2, 8
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s46, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB97_3
+; GFX13-NEXT: .LBB97_2:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: .LBB97_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB97_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v39, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v37, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v35, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v33, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v32, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v34, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v36, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v38, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-NEXT: s_branch .LBB97_6
+; GFX13-NEXT: .LBB97_5:
+; GFX13-NEXT: v_dual_mov_b32 v38, s0 :: v_dual_mov_b32 v39, s1
+; GFX13-NEXT: v_dual_mov_b32 v36, s2 :: v_dual_mov_b32 v37, s3
+; GFX13-NEXT: v_dual_mov_b32 v34, s16 :: v_dual_mov_b32 v35, s17
+; GFX13-NEXT: v_dual_mov_b32 v32, s18 :: v_dual_mov_b32 v33, s19
+; GFX13-NEXT: v_dual_mov_b32 v1, s46 :: v_dual_mov_b32 v2, s44
+; GFX13-NEXT: v_dual_mov_b32 v5, s45 :: v_dual_mov_b32 v6, s43
+; GFX13-NEXT: v_dual_mov_b32 v7, s42 :: v_dual_mov_b32 v9, s41
+; GFX13-NEXT: v_dual_mov_b32 v10, s29 :: v_dual_mov_b32 v13, s40
+; GFX13-NEXT: v_dual_mov_b32 v14, s28 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s24
+; GFX13-NEXT: v_dual_mov_b32 v21, s25 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v23, s22 :: v_dual_mov_b32 v25, s21
+; GFX13-NEXT: v_dual_mov_b32 v26, s15 :: v_dual_mov_b32 v29, s20
+; GFX13-NEXT: v_dual_mov_b32 v30, s14 :: v_dual_mov_b32 v31, s13
+; GFX13-NEXT: v_dual_mov_b32 v27, s10 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB97_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34414,6 +40241,339 @@ define <16 x i16> @bitcast_v32i8_to_v16i16(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v7, v16, v7, 0x5040100
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v16i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v37, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v31.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v0.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v17.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v19.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v23.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v25.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v27.h
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v31.h
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v37
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB98_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB98_4
+; GFX13-TRUE16-NEXT: .LBB98_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB98_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v17, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v31, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v23, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v32, v28, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v29, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v13, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v16.l, v8.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v18.l, v8.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v22.l, v9.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v24.l, v9.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v26.l, v10.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v30.l, v10.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_hi16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-TRUE16-NEXT: .LBB98_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v30.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v33.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v10.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v9.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v10.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v2.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v9.l, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v29.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v31.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v13.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v8.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v8.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v23.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v17.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v8.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v16i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v1 :: v_dual_mov_b32 v36, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v1, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v5 :: v_dual_mov_b32 v35, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v3 :: v_dual_mov_b32 v38, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v19
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v23
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v25
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v27
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB98_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB98_4
+; GFX13-FAKE16-NEXT: .LBB98_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB98_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v36, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v18, v17, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v16, v39, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v22, v19, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v24, v23, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v26, v25, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v30, v27, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v4, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v6, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-FAKE16-NEXT: .LBB98_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v30, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v20, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v27, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v23, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v25, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v5, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v19, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v16, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v39, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v14, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v17, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v9, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v10, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v32, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v36, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v34
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v11, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v18, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v11, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v12, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v13, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v19, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v7, 0x5040100
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35327,6 +41487,292 @@ define inreg <16 x i16> @bitcast_v32i8_to_v16i16_scalar(<32 x i8> inreg %a, i32
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v14
; GFX11-FAKE16-NEXT: .LBB99_5: ; %end
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v16i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB99_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v4, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_and_b32 s43, s28, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s44, s29, 8
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s12, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s9, 8
+; GFX13-TRUE16-NEXT: s_or_b32 s43, s43, s44
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s45, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s18, s19, v4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s43, s43, s44
+; GFX13-TRUE16-NEXT: s_and_b32 s44, s11, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s45, s7, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s2, s3, v4
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s40, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s10, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v6, s44
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s45, s46
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s8, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s4, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v4
+; GFX13-TRUE16-NEXT: s_or_b32 s45, s45, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s22, s23, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v4
+; GFX13-TRUE16-NEXT: s_and_b32 s47, s14, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s5, 8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, s45
+; GFX13-TRUE16-NEXT: s_or_b32 s45, s47, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s44, s44, s45
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s41, s15, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s13, s6, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v8.l
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s43 :: v_dual_mov_b32 v6, s44
+; GFX13-TRUE16-NEXT: s_branch .LBB99_3
+; GFX13-TRUE16-NEXT: .LBB99_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: .LBB99_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB99_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s13, s6, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s8, s4, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s14, s5, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s41, s15, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s12, s9, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s40, s10, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s11, s7, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s26, s27, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s22, s23, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s2, s3, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s18, s19, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, s16, s17, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v15
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: .LBB99_5: ; %end
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v16i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB99_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v4, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s43, s28, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s44, s29, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s45, s5, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s43, s43, s44
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s20, s21, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s22, s23, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: s_and_b32 s44, s9, 0xff
+; GFX13-FAKE16-NEXT: s_and_b32 s46, s7, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s15, s8, v4
+; GFX13-FAKE16-NEXT: s_lshl_b32 s47, s4, 8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s24, s25, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s26, s27, v4
+; GFX13-FAKE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: s_or_b32 s45, s46, s47
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s41, s12, v4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s43, s43, s44
+; GFX13-FAKE16-NEXT: s_and_b32 s44, s40, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, s45, 16, v5
+; GFX13-FAKE16-NEXT: s_lshl_b32 s45, s13, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s46, s6, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-FAKE16-NEXT: s_and_b32 s45, s11, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: s_and_b32 s47, s14, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s56, s10, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s45, s45, s46
+; GFX13-FAKE16-NEXT: s_or_b32 s46, s47, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s44, s44, s45
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, s46, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s43 :: v_dual_mov_b32 v6, s44
+; GFX13-FAKE16-NEXT: s_branch .LBB99_3
+; GFX13-FAKE16-NEXT: .LBB99_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: .LBB99_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB99_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s41, s12, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s14, s10, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s11, s6, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s15, s8, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s16, s17, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s0, s1, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s40, s13, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s7, s4, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s28, s29, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s9, s5, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s24, s25, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s26, s27, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s22, s23, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s18, s19, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v0, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v12, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v11, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v5, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v14
+; GFX13-FAKE16-NEXT: .LBB99_5: ; %end
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35593,6 +42039,32 @@ define <16 x bfloat> @bitcast_v16f16_to_v16bf16(<16 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB100_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v16bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB100_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB100_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35924,6 +42396,45 @@ define inreg <16 x bfloat> @bitcast_v16f16_to_v16bf16_scalar(<16 x half> inreg %
; GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v16bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB101_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB101_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36727,6 +43238,32 @@ define <16 x half> @bitcast_v16bf16_to_v16f16(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB102_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v16f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB102_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB102_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37639,6 +44176,45 @@ define inreg <16 x half> @bitcast_v16bf16_to_v16f16_scalar(<16 x bfloat> inreg %
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v16f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s7, s19
+; GFX13-NEXT: s_mov_b32 s6, s18
+; GFX13-NEXT: s_mov_b32 s5, s17
+; GFX13-NEXT: s_mov_b32 s4, s16
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB103_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v7, 0x40c0, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v6, 0x40c0, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v5, 0x40c0, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v4, 0x40c0, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v3, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB103_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38308,6 +44884,189 @@ define <32 x i8> @bitcast_v16f16_to_v32i8(<16 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16f16_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB104_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB104_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB104_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB104_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16f16_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB104_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB104_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB104_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v39, 0x200, v39 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v37, 0x200, v37 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v35, 0x200, v35 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v33, 0x200, v33 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v32, 0x200, v32 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v34, 0x200, v34 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v36, 0x200, v36 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v38, 0x200, v38 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB104_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38984,6 +45743,122 @@ define inreg <32 x i8> @bitcast_v16f16_to_v32i8_scalar(<16 x half> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v24, v32
; GFX11-NEXT: v_mov_b32_e32 v28, v33
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16f16_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB105_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s13, s19, 24
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s20, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s21, s18, 8
+; GFX13-NEXT: s_lshr_b32 s22, s17, 24
+; GFX13-NEXT: s_lshr_b32 s23, s17, 16
+; GFX13-NEXT: s_lshr_b32 s25, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s26, s16, 8
+; GFX13-NEXT: s_lshr_b32 s27, s3, 24
+; GFX13-NEXT: s_lshr_b32 s28, s3, 16
+; GFX13-NEXT: s_lshr_b32 s40, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s41, s2, 8
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s46, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB105_3
+; GFX13-NEXT: .LBB105_2:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: .LBB105_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB105_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v39, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v37, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v35, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v33, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v32, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v34, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v36, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v38, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-NEXT: s_branch .LBB105_6
+; GFX13-NEXT: .LBB105_5:
+; GFX13-NEXT: v_dual_mov_b32 v38, s0 :: v_dual_mov_b32 v39, s1
+; GFX13-NEXT: v_dual_mov_b32 v36, s2 :: v_dual_mov_b32 v37, s3
+; GFX13-NEXT: v_dual_mov_b32 v34, s16 :: v_dual_mov_b32 v35, s17
+; GFX13-NEXT: v_dual_mov_b32 v32, s18 :: v_dual_mov_b32 v33, s19
+; GFX13-NEXT: v_dual_mov_b32 v1, s46 :: v_dual_mov_b32 v2, s44
+; GFX13-NEXT: v_dual_mov_b32 v5, s45 :: v_dual_mov_b32 v6, s43
+; GFX13-NEXT: v_dual_mov_b32 v7, s42 :: v_dual_mov_b32 v9, s41
+; GFX13-NEXT: v_dual_mov_b32 v10, s29 :: v_dual_mov_b32 v13, s40
+; GFX13-NEXT: v_dual_mov_b32 v14, s28 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s24
+; GFX13-NEXT: v_dual_mov_b32 v21, s25 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v23, s22 :: v_dual_mov_b32 v25, s21
+; GFX13-NEXT: v_dual_mov_b32 v26, s15 :: v_dual_mov_b32 v29, s20
+; GFX13-NEXT: v_dual_mov_b32 v30, s14 :: v_dual_mov_b32 v31, s13
+; GFX13-NEXT: v_dual_mov_b32 v27, s10 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB105_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -39979,6 +46854,339 @@ define <16 x half> @bitcast_v32i8_to_v16f16(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v7, v16, v7, 0x5040100
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v16f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v37, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v31.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v0.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v17.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v19.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v23.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v25.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v27.h
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v31.h
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v37
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB106_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB106_4
+; GFX13-TRUE16-NEXT: .LBB106_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB106_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v17, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v31, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v23, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v32, v28, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v29, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v13, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v16.l, v8.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v18.l, v8.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v22.l, v9.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v24.l, v9.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v26.l, v10.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v30.l, v10.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_hi16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-TRUE16-NEXT: .LBB106_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v30.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v33.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v10.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v9.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v10.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v2.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v9.l, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v29.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v31.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v13.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v8.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v8.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v23.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v17.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v8.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v16f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v1 :: v_dual_mov_b32 v36, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v1, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v5 :: v_dual_mov_b32 v35, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v3 :: v_dual_mov_b32 v38, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v19
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v23
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v25
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v27
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB106_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB106_4
+; GFX13-FAKE16-NEXT: .LBB106_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB106_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v36, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v18, v17, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v16, v39, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v22, v19, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v24, v23, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v26, v25, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v30, v27, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v4, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v6, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-FAKE16-NEXT: .LBB106_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v30, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v20, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v27, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v23, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v25, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v5, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v19, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v16, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v39, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v14, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v17, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v9, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v10, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v32, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v36, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v34
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v11, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v18, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v11, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v12, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v13, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v19, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v7, 0x5040100
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -40892,6 +48100,292 @@ define inreg <16 x half> @bitcast_v32i8_to_v16f16_scalar(<32 x i8> inreg %a, i32
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v14
; GFX11-FAKE16-NEXT: .LBB107_5: ; %end
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v16f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB107_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v4, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_and_b32 s43, s28, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s44, s29, 8
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s12, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s9, 8
+; GFX13-TRUE16-NEXT: s_or_b32 s43, s43, s44
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s45, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s18, s19, v4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s43, s43, s44
+; GFX13-TRUE16-NEXT: s_and_b32 s44, s11, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s45, s7, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s2, s3, v4
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s40, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s10, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v6, s44
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s45, s46
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s8, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s4, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v4
+; GFX13-TRUE16-NEXT: s_or_b32 s45, s45, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s22, s23, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v4
+; GFX13-TRUE16-NEXT: s_and_b32 s47, s14, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s5, 8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, s45
+; GFX13-TRUE16-NEXT: s_or_b32 s45, s47, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s44, s44, s45
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s41, s15, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s13, s6, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v8.l
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s43 :: v_dual_mov_b32 v6, s44
+; GFX13-TRUE16-NEXT: s_branch .LBB107_3
+; GFX13-TRUE16-NEXT: .LBB107_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: .LBB107_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB107_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s13, s6, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s8, s4, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s14, s5, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s41, s15, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s12, s9, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s40, s10, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s11, s7, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s26, s27, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s22, s23, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s2, s3, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s18, s19, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, s16, s17, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v15
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: .LBB107_5: ; %end
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v16f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB107_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v4, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s43, s28, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s44, s29, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s45, s5, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s43, s43, s44
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s20, s21, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s22, s23, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: s_and_b32 s44, s9, 0xff
+; GFX13-FAKE16-NEXT: s_and_b32 s46, s7, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s15, s8, v4
+; GFX13-FAKE16-NEXT: s_lshl_b32 s47, s4, 8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s24, s25, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s26, s27, v4
+; GFX13-FAKE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: s_or_b32 s45, s46, s47
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s41, s12, v4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s43, s43, s44
+; GFX13-FAKE16-NEXT: s_and_b32 s44, s40, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, s45, 16, v5
+; GFX13-FAKE16-NEXT: s_lshl_b32 s45, s13, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s46, s6, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-FAKE16-NEXT: s_and_b32 s45, s11, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: s_and_b32 s47, s14, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s56, s10, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s45, s45, s46
+; GFX13-FAKE16-NEXT: s_or_b32 s46, s47, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s44, s44, s45
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, s46, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s43 :: v_dual_mov_b32 v6, s44
+; GFX13-FAKE16-NEXT: s_branch .LBB107_3
+; GFX13-FAKE16-NEXT: .LBB107_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: .LBB107_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB107_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s41, s12, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s14, s10, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s11, s6, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s15, s8, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s16, s17, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s0, s1, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s40, s13, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s7, s4, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s28, s29, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s9, s5, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s24, s25, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s26, s27, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s22, s23, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s18, s19, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v0, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v12, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v11, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v5, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v14
+; GFX13-FAKE16-NEXT: .LBB107_5: ; %end
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -42070,6 +49564,189 @@ define <32 x i8> @bitcast_v16bf16_to_v32i8(<16 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v24, v32
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v33
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v16bf16_to_v32i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, v7 :: v_dual_mov_b32 v27, v6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, v5 :: v_dual_mov_b32 v19, v4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v11, v2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB108_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: .LBB108_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB108_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v28, 0x40c0, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v27, 0x40c0, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v20, 0x40c0, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v19, 0x40c0, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v12, 0x40c0, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[32:33], 24, v[27:28]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[33:34], 24, v[19:20]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[34:35], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 24, v28 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[35:36], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v28 :: v_dual_lshrrev_b32 v26, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 8, v27 :: v_dual_lshrrev_b32 v23, 24, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v20 :: v_dual_lshrrev_b32 v21, 8, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v19 :: v_dual_lshrrev_b32 v17, 8, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v15, 24, v12 :: v_dual_lshrrev_b32 v14, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v13, 8, v12 :: v_dual_lshrrev_b32 v10, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v9, 8, v11 :: v_dual_lshrrev_b32 v7, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v6, 16, v4 :: v_dual_lshrrev_b32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v3 :: v_dual_lshrrev_b32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB108_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v32.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v16bf16_to_v32i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v34, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v36, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB108_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: .LBB108_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB108_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v39, 0x40c0, v39 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v37, 0x40c0, v37 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v35, 0x40c0, v35 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v33, 0x40c0, v33 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v32, 0x40c0, v32 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v34, 0x40c0, v34 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v36, 0x40c0, v36 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v38, 0x40c0, v38 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-FAKE16-NEXT: .LBB108_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -43415,6 +51092,122 @@ define inreg <32 x i8> @bitcast_v16bf16_to_v32i8_scalar(<16 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v20, v33
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v28, v32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v16bf16_to_v32i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB109_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s13, s19, 24
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s20, s19, 8
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s21, s18, 8
+; GFX13-NEXT: s_lshr_b32 s22, s17, 24
+; GFX13-NEXT: s_lshr_b32 s23, s17, 16
+; GFX13-NEXT: s_lshr_b32 s25, s17, 8
+; GFX13-NEXT: s_lshr_b32 s24, s16, 16
+; GFX13-NEXT: s_lshr_b32 s26, s16, 8
+; GFX13-NEXT: s_lshr_b32 s27, s3, 24
+; GFX13-NEXT: s_lshr_b32 s28, s3, 16
+; GFX13-NEXT: s_lshr_b32 s40, s3, 8
+; GFX13-NEXT: s_lshr_b32 s29, s2, 16
+; GFX13-NEXT: s_lshr_b32 s41, s2, 8
+; GFX13-NEXT: s_lshr_b32 s42, s1, 24
+; GFX13-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 8
+; GFX13-NEXT: s_lshr_b32 s44, s0, 16
+; GFX13-NEXT: s_lshr_b32 s46, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB109_3
+; GFX13-NEXT: .LBB109_2:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr21
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr20
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: .LBB109_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB109_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v39, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v37, 0x40c0, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v35, 0x40c0, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v33, 0x40c0, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v32, 0x40c0, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v34, 0x40c0, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v36, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v38, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_dual_lshrrev_b32 v31, 24, v33 :: v_dual_lshrrev_b32 v30, 16, v33
+; GFX13-NEXT: v_lshrrev_b64 v[27:28], 24, v[32:33]
+; GFX13-NEXT: v_lshrrev_b64 v[19:20], 24, v[34:35]
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[36:37]
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[38:39]
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 8, v33 :: v_dual_lshrrev_b32 v26, 16, v32
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 8, v32 :: v_dual_lshrrev_b32 v23, 24, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v22, 16, v35 :: v_dual_lshrrev_b32 v21, 8, v35
+; GFX13-NEXT: v_dual_lshrrev_b32 v18, 16, v34 :: v_dual_lshrrev_b32 v17, 8, v34
+; GFX13-NEXT: v_dual_lshrrev_b32 v15, 24, v37 :: v_dual_lshrrev_b32 v14, 16, v37
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v37 :: v_dual_lshrrev_b32 v10, 16, v36
+; GFX13-NEXT: v_dual_lshrrev_b32 v9, 8, v36 :: v_dual_lshrrev_b32 v7, 24, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v6, 16, v39 :: v_dual_lshrrev_b32 v5, 8, v39
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v38 :: v_dual_lshrrev_b32 v1, 8, v38
+; GFX13-NEXT: s_branch .LBB109_6
+; GFX13-NEXT: .LBB109_5:
+; GFX13-NEXT: v_dual_mov_b32 v38, s0 :: v_dual_mov_b32 v39, s1
+; GFX13-NEXT: v_dual_mov_b32 v36, s2 :: v_dual_mov_b32 v37, s3
+; GFX13-NEXT: v_dual_mov_b32 v34, s16 :: v_dual_mov_b32 v35, s17
+; GFX13-NEXT: v_dual_mov_b32 v32, s18 :: v_dual_mov_b32 v33, s19
+; GFX13-NEXT: v_dual_mov_b32 v1, s46 :: v_dual_mov_b32 v2, s44
+; GFX13-NEXT: v_dual_mov_b32 v5, s45 :: v_dual_mov_b32 v6, s43
+; GFX13-NEXT: v_dual_mov_b32 v7, s42 :: v_dual_mov_b32 v9, s41
+; GFX13-NEXT: v_dual_mov_b32 v10, s29 :: v_dual_mov_b32 v13, s40
+; GFX13-NEXT: v_dual_mov_b32 v14, s28 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v17, s26 :: v_dual_mov_b32 v18, s24
+; GFX13-NEXT: v_dual_mov_b32 v21, s25 :: v_dual_mov_b32 v22, s23
+; GFX13-NEXT: v_dual_mov_b32 v23, s22 :: v_dual_mov_b32 v25, s21
+; GFX13-NEXT: v_dual_mov_b32 v26, s15 :: v_dual_mov_b32 v29, s20
+; GFX13-NEXT: v_dual_mov_b32 v30, s14 :: v_dual_mov_b32 v31, s13
+; GFX13-NEXT: v_dual_mov_b32 v27, s10 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB109_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v38 :: v_dual_mov_b32 v4, v39
+; GFX13-NEXT: v_dual_mov_b32 v8, v36 :: v_dual_mov_b32 v12, v37
+; GFX13-NEXT: v_dual_mov_b32 v16, v34 :: v_dual_mov_b32 v20, v35
+; GFX13-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v28, v33
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -44414,6 +52207,339 @@ define <16 x bfloat> @bitcast_v32i8_to_v16bf16(<32 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v7, v16, v7, 0x5040100
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v16bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x1
+; GFX13-TRUE16-NEXT: scratch_load_b32 v37, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v33.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v31.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v32.l, v0.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v17.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v19.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v23.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v25.h
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v27.h
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.h, 8, v31.h
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v37
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB110_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB110_4
+; GFX13-TRUE16-NEXT: .LBB110_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB110_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v17, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v20, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v31, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v14, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v23, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v32, v28, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v29, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v13, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v16.l, v8.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v18.l, v8.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v22.l, v9.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v24.l, v9.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v26.l, v10.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v30.l, v10.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_hi16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-TRUE16-NEXT: .LBB110_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v30.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v24.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v33.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v10.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v9.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v10.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v2.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v9.l, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v29.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v31.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v13.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v8.l, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v8.h, v0.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v12.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v23.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v17.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v28.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v8.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v16bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v1 :: v_dual_mov_b32 v36, v0
+; GFX13-FAKE16-NEXT: s_clause 0x1
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v1, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v7 :: v_dual_mov_b32 v32, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v5 :: v_dual_mov_b32 v35, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v3 :: v_dual_mov_b32 v38, v2
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v39, 8, v17
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v19
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v19, 8, v23
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v25
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v25, 8, v27
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v27, 8, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB110_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB110_4
+; GFX13-FAKE16-NEXT: .LBB110_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB110_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v36, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v18, v17, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v16, v39, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v22, v19, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v24, v23, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v26, v25, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v30, v27, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v4, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v6, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-FAKE16-NEXT: .LBB110_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v29
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v30, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v24, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v21
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v20, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v27, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v23, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v25, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v5, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v19, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v16, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v12, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v39, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v14, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v17, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v9, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v10, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v32, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v36, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v31
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v18, 8, v34
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v11, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v17, v15, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v18, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v11, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v12, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v13, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v14, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v16, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v19, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v20, v7, 0x5040100
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -45319,6 +53445,292 @@ define inreg <16 x bfloat> @bitcast_v32i8_to_v16bf16_scalar(<32 x i8> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v14
; GFX11-FAKE16-NEXT: .LBB111_5: ; %end
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v32i8_to_v16bf16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB111_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v4, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_and_b32 s43, s28, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s44, s29, 8
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s12, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s9, 8
+; GFX13-TRUE16-NEXT: s_or_b32 s43, s43, s44
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s45, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s18, s19, v4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s43, s43, s44
+; GFX13-TRUE16-NEXT: s_and_b32 s44, s11, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s45, s7, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s2, s3, v4
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s40, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s10, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v6, s44
+; GFX13-TRUE16-NEXT: s_or_b32 s44, s45, s46
+; GFX13-TRUE16-NEXT: s_and_b32 s45, s8, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s4, 8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v4
+; GFX13-TRUE16-NEXT: s_or_b32 s45, s45, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s22, s23, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s26, s27, v4
+; GFX13-TRUE16-NEXT: s_and_b32 s47, s14, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s46, s5, 8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, s45
+; GFX13-TRUE16-NEXT: s_or_b32 s45, s47, s46
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s44, s44, s45
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s41, s15, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s13, s6, v4
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v8.l
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s43 :: v_dual_mov_b32 v6, s44
+; GFX13-TRUE16-NEXT: s_branch .LBB111_3
+; GFX13-TRUE16-NEXT: .LBB111_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-TRUE16-NEXT: .LBB111_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB111_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s13, s6, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s8, s4, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s14, s5, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s41, s15, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s12, s9, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s40, s10, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, s11, s7, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, s26, s27, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s22, s23, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, s2, s3, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, s18, s19, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, s16, s17, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v15
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: .LBB111_5: ; %end
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v32i8_to_v16bf16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB111_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v4, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s43, s28, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s44, s29, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s45, s5, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s43, s43, s44
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s20, s21, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s22, s23, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: s_and_b32 s44, s9, 0xff
+; GFX13-FAKE16-NEXT: s_and_b32 s46, s7, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s15, s8, v4
+; GFX13-FAKE16-NEXT: s_lshl_b32 s47, s4, 8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s24, s25, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s26, s27, v4
+; GFX13-FAKE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: s_or_b32 s45, s46, s47
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s41, s12, v4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s43, s43, s44
+; GFX13-FAKE16-NEXT: s_and_b32 s44, s40, 0xff
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, s45, 16, v5
+; GFX13-FAKE16-NEXT: s_lshl_b32 s45, s13, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s46, s6, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s44, s44, s45
+; GFX13-FAKE16-NEXT: s_and_b32 s45, s11, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: s_and_b32 s47, s14, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s56, s10, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s45, s45, s46
+; GFX13-FAKE16-NEXT: s_or_b32 s46, s47, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s44, s44, s45
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, s46, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s43 :: v_dual_mov_b32 v6, s44
+; GFX13-FAKE16-NEXT: s_branch .LBB111_3
+; GFX13-FAKE16-NEXT: .LBB111_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
+; GFX13-FAKE16-NEXT: .LBB111_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB111_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s41, s12, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s14, s10, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s11, s6, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s15, s8, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s16, s17, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, s0, s1, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s40, s13, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s7, s4, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s28, s29, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s9, s5, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s24, s25, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s26, s27, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s22, s23, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s18, s19, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v0, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v12, 16, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v11, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v5, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v9, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v7, 16, v14
+; GFX13-FAKE16-NEXT: .LBB111_5: ; %end
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.288bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.288bit.ll
index f27721779bc86..db8b611ba4078 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.288bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.288bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <9 x float> @bitcast_v9i32_to_v9f32(<9 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v9i32_to_v9f32:
@@ -92,6 +94,28 @@ define <9 x float> @bitcast_v9i32_to_v9f32(<9 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i32_to_v9f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -253,6 +277,43 @@ define inreg <9 x float> @bitcast_v9i32_to_v9f32_scalar(<9 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i32_to_v9f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -351,6 +412,28 @@ define <9 x i32> @bitcast_v9f32_to_v9i32(<9 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f32_to_v9i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -519,6 +602,43 @@ define inreg <9 x i32> @bitcast_v9f32_to_v9i32_scalar(<9 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f32_to_v9i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -679,6 +799,28 @@ define <18 x i16> @bitcast_v9i32_to_v18i16(<9 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i32_to_v18i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -894,6 +1036,43 @@ define inreg <18 x i16> @bitcast_v9i32_to_v18i16_scalar(<9 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i32_to_v18i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1117,6 +1296,33 @@ define <9 x i32> @bitcast_v18i16_to_v9i32(<18 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i16_to_v9i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1392,6 +1598,47 @@ define inreg <9 x i32> @bitcast_v18i16_to_v9i32_scalar(<18 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i16_to_v9i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1552,6 +1799,28 @@ define <18 x half> @bitcast_v9i32_to_v18f16(<9 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i32_to_v18f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1767,6 +2036,43 @@ define inreg <18 x half> @bitcast_v9i32_to_v18f16_scalar(<9 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i32_to_v18f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2027,6 +2333,33 @@ define <9 x i32> @bitcast_v18f16_to_v9i32(<18 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f16_to_v9i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2333,6 +2666,47 @@ define inreg <9 x i32> @bitcast_v18f16_to_v9i32_scalar(<18 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f16_to_v9i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2488,6 +2862,28 @@ define <18 x i16> @bitcast_v9f32_to_v18i16(<9 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f32_to_v18i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2737,6 +3133,43 @@ define inreg <18 x i16> @bitcast_v9f32_to_v18i16_scalar(<9 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f32_to_v18i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2960,6 +3393,33 @@ define <9 x float> @bitcast_v18i16_to_v9f32(<18 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB14_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i16_to_v9f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB14_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3235,6 +3695,47 @@ define inreg <9 x float> @bitcast_v18i16_to_v9f32_scalar(<18 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i16_to_v9f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3390,6 +3891,28 @@ define <18 x half> @bitcast_v9f32_to_v18f16(<9 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f32_to_v18f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3639,6 +4162,43 @@ define inreg <18 x half> @bitcast_v9f32_to_v18f16_scalar(<9 x float> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f32_to_v18f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3899,6 +4459,33 @@ define <9 x float> @bitcast_v18f16_to_v9f32(<18 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f16_to_v9f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4205,6 +4792,47 @@ define inreg <9 x float> @bitcast_v18f16_to_v9f32_scalar(<18 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_mov_b32_e32 v8, s20
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f16_to_v9f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_mov_b32_e32 v8, s20
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4467,6 +5095,33 @@ define <18 x half> @bitcast_v18i16_to_v18f16(<18 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i16_to_v18f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4804,6 +5459,50 @@ define inreg <18 x half> @bitcast_v18i16_to_v18f16_scalar(<18 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i16_to_v18f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB21_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5033,6 +5732,33 @@ define <18 x i16> @bitcast_v18f16_to_v18i16(<18 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f16_to_v18i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v9
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5369,6 +6095,50 @@ define inreg <18 x i16> @bitcast_v18f16_to_v18i16_scalar(<18 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f16_to_v18i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s21, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
index c0fcebcf00814..e13ba74f1e390 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <10 x float> @bitcast_v10i32_to_v10f32(<10 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v10i32_to_v10f32:
@@ -99,6 +101,28 @@ define <10 x float> @bitcast_v10i32_to_v10f32(<10 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v10f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -267,6 +291,44 @@ define inreg <10 x float> @bitcast_v10i32_to_v10f32_scalar(<10 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v10f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -371,6 +433,28 @@ define <10 x i32> @bitcast_v10f32_to_v10i32(<10 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v10i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -546,6 +630,44 @@ define inreg <10 x i32> @bitcast_v10f32_to_v10i32_scalar(<10 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v10i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -719,6 +841,28 @@ define <20 x i16> @bitcast_v10i32_to_v20i16(<10 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v20i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -947,6 +1091,44 @@ define inreg <20 x i16> @bitcast_v10i32_to_v20i16_scalar(<10 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v20i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1187,6 +1369,34 @@ define <10 x i32> @bitcast_v20i16_to_v10i32(<20 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v10i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1481,6 +1691,48 @@ define inreg <10 x i32> @bitcast_v20i16_to_v10i32_scalar(<20 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v10i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1654,6 +1906,28 @@ define <20 x half> @bitcast_v10i32_to_v20f16(<10 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v20f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1882,6 +2156,44 @@ define inreg <20 x half> @bitcast_v10i32_to_v20f16_scalar(<10 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v20f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2162,6 +2474,34 @@ define <10 x i32> @bitcast_v20f16_to_v10i32(<20 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v10i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2490,6 +2830,48 @@ define inreg <10 x i32> @bitcast_v20f16_to_v10i32_scalar(<20 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v10i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3361,6 +3743,260 @@ define <40 x i8> @bitcast_v10i32_to_v40i8(<10 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10i32_to_v40i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-TRUE16-NEXT: s_clause 0x2
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10i32_to_v40i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-FAKE16-NEXT: s_clause 0x2
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4164,6 +4800,174 @@ define inreg <40 x i8> @bitcast_v10i32_to_v40i8_scalar(<10 x i32> inreg %a, i32
; GFX11-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v40i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s63, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s15, s21, 8
+; GFX13-NEXT: s_lshr_b32 s24, s20, 16
+; GFX13-NEXT: s_lshr_b32 s23, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s25, s19, 8
+; GFX13-NEXT: s_lshr_b32 s29, s18, 16
+; GFX13-NEXT: s_lshr_b32 s28, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s44, s16, 8
+; GFX13-NEXT: s_lshr_b32 s45, s3, 24
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s57, s2, 8
+; GFX13-NEXT: s_lshr_b32 s58, s1, 24
+; GFX13-NEXT: s_lshr_b32 s59, s1, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s63, -1
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s63, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s14, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s15, s21, 8
+; GFX13-NEXT: s_lshr_b32 s24, s20, 16
+; GFX13-NEXT: s_lshr_b32 s23, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s25, s19, 8
+; GFX13-NEXT: s_lshr_b32 s29, s18, 16
+; GFX13-NEXT: s_lshr_b32 s28, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s44, s16, 8
+; GFX13-NEXT: s_lshr_b32 s45, s3, 24
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s57, s2, 8
+; GFX13-NEXT: s_lshr_b32 s58, s1, 24
+; GFX13-NEXT: s_lshr_b32 s59, s1, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: v_mov_b32_e32 v6, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v7, s56, s10, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v2, s61, s12, v6
+; GFX13-NEXT: v_perm_b32 v4, s59, s58, v6
+; GFX13-NEXT: v_perm_b32 v9, s46, s45, v6
+; GFX13-NEXT: v_perm_b32 v11, s43, s8, v6
+; GFX13-NEXT: v_perm_b32 v1, s0, s62, v6
+; GFX13-NEXT: v_perm_b32 v3, s1, s60, v6
+; GFX13-NEXT: v_perm_b32 v5, s2, s57, v6
+; GFX13-NEXT: v_perm_b32 v8, s3, s47, v6
+; GFX13-NEXT: v_perm_b32 v10, s16, s44, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_lshlrev_b32 v11, 16, v11
+; GFX13-NEXT: v_perm_b32 v12, s24, s4, v6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v1, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v2, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v4, v8, v9
+; GFX13-NEXT: v_perm_b32 v8, s29, s6, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v5, v7
+; GFX13-NEXT: v_perm_b32 v7, s42, s41, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_bitop2_b32 v5, v10, v11 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v11, s27, s26, v6
+; GFX13-NEXT: v_perm_b32 v14, s22, s14, v6
+; GFX13-NEXT: v_perm_b32 v9, s17, s40, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v10, s18, s28, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v13, s19, s25, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-NEXT: v_perm_b32 v15, s20, s23, v6
+; GFX13-NEXT: v_perm_b32 v16, s21, s15, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v8
+; GFX13-NEXT: v_or_b32_e32 v8, v13, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v12
+; GFX13-NEXT: v_or_b32_e32 v10, v16, v14
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5351,6 +6155,423 @@ define <10 x i32> @bitcast_v40i8_to_v10i32(<40 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v12
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v10i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x9
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v66, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v48.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v49.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v50.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v51.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v52.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v53.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v54.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v55.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v64.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v65.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v66
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v30, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v32, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v50.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v48.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v29.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v39.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v37.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v33.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v10i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v48, v0
+; GFX13-FAKE16-NEXT: s_clause 0x9
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v9 :: v_dual_mov_b32 v33, v8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v7 :: v_dual_mov_b32 v34, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v36, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v38, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v48, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v34, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v48, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v33, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v35
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v34, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v31
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v3, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v12, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v29
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v65, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v51
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v12, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v55
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v53
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v50, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v49
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v16, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6231,6 +7452,183 @@ define inreg <10 x i32> @bitcast_v40i8_to_v10i32_scalar(<40 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v9, v14, v15
; GFX11-NEXT: .LBB15_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i8_to_v10i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-NEXT: v_readfirstlane_b32 s4, v21
+; GFX13-NEXT: v_readfirstlane_b32 s5, v20
+; GFX13-NEXT: v_readfirstlane_b32 s6, v19
+; GFX13-NEXT: v_readfirstlane_b32 s7, v18
+; GFX13-NEXT: v_readfirstlane_b32 s8, v17
+; GFX13-NEXT: v_readfirstlane_b32 s9, v16
+; GFX13-NEXT: v_readfirstlane_b32 s10, v15
+; GFX13-NEXT: v_readfirstlane_b32 s11, v14
+; GFX13-NEXT: v_readfirstlane_b32 s12, v13
+; GFX13-NEXT: v_readfirstlane_b32 s13, v12
+; GFX13-NEXT: v_readfirstlane_b32 s14, v11
+; GFX13-NEXT: v_readfirstlane_b32 s15, v10
+; GFX13-NEXT: v_readfirstlane_b32 s40, v9
+; GFX13-NEXT: v_readfirstlane_b32 s41, v8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v7
+; GFX13-NEXT: v_readfirstlane_b32 s43, v6
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s45, v4
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s47, v2
+; GFX13-NEXT: v_readfirstlane_b32 s56, v1
+; GFX13-NEXT: v_readfirstlane_b32 s57, v0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB15_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v5
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_perm_b32 v6, s45, s44, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v9, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v10, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s5, s4, v5
+; GFX13-NEXT: v_perm_b32 v8, s47, s46, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v9, s43, s42, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v12, s15, s14, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v13, 16, v13
+; GFX13-NEXT: v_perm_b32 v14, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v15, s7, s6, v5
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v10
+; GFX13-NEXT: v_or_b32_e32 v8, v14, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v13
+; GFX13-NEXT: s_branch .LBB15_3
+; GFX13-NEXT: .LBB15_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
+; GFX13-NEXT: .LBB15_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-NEXT: v_perm_b32 v11, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s9, s8, v5
+; GFX13-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v14, s7, s6, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v6, s47, s46, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v5
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s45, s44, v5
+; GFX13-NEXT: v_perm_b32 v8, s43, s42, v5
+; GFX13-NEXT: v_perm_b32 v5, s5, s4, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v5 :: v_dual_bitop2_b32 v5, v6, v7 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_or_b32_e32 v8, v12, v13
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v9, v14, v15
+; GFX13-NEXT: .LBB15_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6341,6 +7739,28 @@ define <5 x double> @bitcast_v10i32_to_v5f64(<10 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB16_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v5f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6509,6 +7929,44 @@ define inreg <5 x double> @bitcast_v10i32_to_v5f64_scalar(<10 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v5f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6599,6 +8057,29 @@ define <10 x i32> @bitcast_v5f64_to_v10i32(<5 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v10i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6754,6 +8235,43 @@ define inreg <10 x i32> @bitcast_v5f64_to_v10i32_scalar(<5 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v10i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6864,6 +8382,28 @@ define <5 x i64> @bitcast_v10i32_to_v5i64(<10 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v5i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7032,6 +8572,44 @@ define inreg <5 x i64> @bitcast_v10i32_to_v5i64_scalar(<10 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i32_to_v5i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7145,6 +8723,37 @@ define <10 x i32> @bitcast_v5i64_to_v10i32(<5 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v10i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7313,6 +8922,39 @@ define inreg <10 x i32> @bitcast_v5i64_to_v10i32_scalar(<5 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v10i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7480,6 +9122,28 @@ define <20 x i16> @bitcast_v10f32_to_v20i16(<10 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v20i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7741,6 +9405,44 @@ define inreg <20 x i16> @bitcast_v10f32_to_v20i16_scalar(<10 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v20i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7981,6 +9683,34 @@ define <10 x float> @bitcast_v20i16_to_v10f32(<20 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v10f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8275,6 +10005,48 @@ define inreg <10 x float> @bitcast_v20i16_to_v10f32_scalar(<20 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v10f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8442,6 +10214,28 @@ define <20 x half> @bitcast_v10f32_to_v20f16(<10 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v20f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8703,6 +10497,44 @@ define inreg <20 x half> @bitcast_v10f32_to_v20f16_scalar(<10 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v20f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8983,6 +10815,34 @@ define <10 x float> @bitcast_v20f16_to_v10f32(<20 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB30_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v10f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB30_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9311,6 +11171,48 @@ define inreg <10 x float> @bitcast_v20f16_to_v10f32_scalar(<20 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v10f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10174,6 +12076,260 @@ define <40 x i8> @bitcast_v10f32_to_v40i8(<10 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10f32_to_v40i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-TRUE16-NEXT: s_clause 0x2
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10f32_to_v40i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-FAKE16-NEXT: s_clause 0x2
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11070,6 +13226,174 @@ define inreg <40 x i8> @bitcast_v10f32_to_v40i8_scalar(<10 x float> inreg %a, i3
; GFX11-NEXT: scratch_store_b128 v0, v[13:16], off offset:16
; GFX11-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v40i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s63, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s15, s21, 8
+; GFX13-NEXT: s_lshr_b32 s24, s20, 16
+; GFX13-NEXT: s_lshr_b32 s23, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s25, s19, 8
+; GFX13-NEXT: s_lshr_b32 s29, s18, 16
+; GFX13-NEXT: s_lshr_b32 s28, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s44, s16, 8
+; GFX13-NEXT: s_lshr_b32 s45, s3, 24
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s57, s2, 8
+; GFX13-NEXT: s_lshr_b32 s58, s1, 24
+; GFX13-NEXT: s_lshr_b32 s59, s1, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s63, -1
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s63, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s14, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s15, s21, 8
+; GFX13-NEXT: s_lshr_b32 s24, s20, 16
+; GFX13-NEXT: s_lshr_b32 s23, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s25, s19, 8
+; GFX13-NEXT: s_lshr_b32 s29, s18, 16
+; GFX13-NEXT: s_lshr_b32 s28, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s44, s16, 8
+; GFX13-NEXT: s_lshr_b32 s45, s3, 24
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s57, s2, 8
+; GFX13-NEXT: s_lshr_b32 s58, s1, 24
+; GFX13-NEXT: s_lshr_b32 s59, s1, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: v_mov_b32_e32 v6, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v7, s56, s10, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v2, s61, s12, v6
+; GFX13-NEXT: v_perm_b32 v4, s59, s58, v6
+; GFX13-NEXT: v_perm_b32 v9, s46, s45, v6
+; GFX13-NEXT: v_perm_b32 v11, s43, s8, v6
+; GFX13-NEXT: v_perm_b32 v1, s0, s62, v6
+; GFX13-NEXT: v_perm_b32 v3, s1, s60, v6
+; GFX13-NEXT: v_perm_b32 v5, s2, s57, v6
+; GFX13-NEXT: v_perm_b32 v8, s3, s47, v6
+; GFX13-NEXT: v_perm_b32 v10, s16, s44, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_lshlrev_b32 v11, 16, v11
+; GFX13-NEXT: v_perm_b32 v12, s24, s4, v6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v1, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v2, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v4, v8, v9
+; GFX13-NEXT: v_perm_b32 v8, s29, s6, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v5, v7
+; GFX13-NEXT: v_perm_b32 v7, s42, s41, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_bitop2_b32 v5, v10, v11 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v11, s27, s26, v6
+; GFX13-NEXT: v_perm_b32 v14, s22, s14, v6
+; GFX13-NEXT: v_perm_b32 v9, s17, s40, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v10, s18, s28, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v13, s19, s25, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-NEXT: v_perm_b32 v15, s20, s23, v6
+; GFX13-NEXT: v_perm_b32 v16, s21, s15, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v8
+; GFX13-NEXT: v_or_b32_e32 v8, v13, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v12
+; GFX13-NEXT: v_or_b32_e32 v10, v16, v14
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12257,6 +14581,423 @@ define <10 x float> @bitcast_v40i8_to_v10f32(<40 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v12
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v10f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x9
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v66, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v48.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v49.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v50.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v51.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v52.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v53.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v54.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v55.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v64.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v65.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v66
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v30, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v32, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v50.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v48.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v12.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v29.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v39.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v37.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v33.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v10f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, v1 :: v_dual_mov_b32 v48, v0
+; GFX13-FAKE16-NEXT: s_clause 0x9
+; GFX13-FAKE16-NEXT: scratch_load_u16 v49, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v50, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v51, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v52, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v53, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v54, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v9 :: v_dual_mov_b32 v33, v8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v7 :: v_dual_mov_b32 v34, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v36, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v3 :: v_dual_mov_b32 v38, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v48, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v36, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v34, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v64, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v48, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v39
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v37
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v33, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v35
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v34, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v31
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v3, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v12, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v10, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v11
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v15
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v14, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v29
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v65, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v64
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v51
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v12, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v55
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v53
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v50, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v49
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v16, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13137,6 +15878,183 @@ define inreg <10 x float> @bitcast_v40i8_to_v10f32_scalar(<40 x i8> inreg %a, i3
; GFX11-NEXT: v_or_b32_e32 v9, v14, v15
; GFX11-NEXT: .LBB35_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i8_to_v10f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-NEXT: v_readfirstlane_b32 s4, v21
+; GFX13-NEXT: v_readfirstlane_b32 s5, v20
+; GFX13-NEXT: v_readfirstlane_b32 s6, v19
+; GFX13-NEXT: v_readfirstlane_b32 s7, v18
+; GFX13-NEXT: v_readfirstlane_b32 s8, v17
+; GFX13-NEXT: v_readfirstlane_b32 s9, v16
+; GFX13-NEXT: v_readfirstlane_b32 s10, v15
+; GFX13-NEXT: v_readfirstlane_b32 s11, v14
+; GFX13-NEXT: v_readfirstlane_b32 s12, v13
+; GFX13-NEXT: v_readfirstlane_b32 s13, v12
+; GFX13-NEXT: v_readfirstlane_b32 s14, v11
+; GFX13-NEXT: v_readfirstlane_b32 s15, v10
+; GFX13-NEXT: v_readfirstlane_b32 s40, v9
+; GFX13-NEXT: v_readfirstlane_b32 s41, v8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v7
+; GFX13-NEXT: v_readfirstlane_b32 s43, v6
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s45, v4
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s47, v2
+; GFX13-NEXT: v_readfirstlane_b32 s56, v1
+; GFX13-NEXT: v_readfirstlane_b32 s57, v0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB35_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v5
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_perm_b32 v6, s45, s44, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v9, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v10, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s5, s4, v5
+; GFX13-NEXT: v_perm_b32 v8, s47, s46, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v9, s43, s42, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v12, s15, s14, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v13, 16, v13
+; GFX13-NEXT: v_perm_b32 v14, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v15, s7, s6, v5
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v10
+; GFX13-NEXT: v_or_b32_e32 v8, v14, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v13
+; GFX13-NEXT: s_branch .LBB35_3
+; GFX13-NEXT: .LBB35_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
+; GFX13-NEXT: .LBB35_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-NEXT: v_perm_b32 v11, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s9, s8, v5
+; GFX13-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v14, s7, s6, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v6, s47, s46, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v5
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s45, s44, v5
+; GFX13-NEXT: v_perm_b32 v8, s43, s42, v5
+; GFX13-NEXT: v_perm_b32 v5, s5, s4, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v5 :: v_dual_bitop2_b32 v5, v6, v7 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_or_b32_e32 v8, v12, v13
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v9, v14, v15
+; GFX13-NEXT: .LBB35_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13241,6 +16159,28 @@ define <5 x double> @bitcast_v10f32_to_v5f64(<10 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v5f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13437,6 +16377,44 @@ define inreg <5 x double> @bitcast_v10f32_to_v5f64_scalar(<10 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v5f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13527,6 +16505,29 @@ define <10 x float> @bitcast_v5f64_to_v10f32(<5 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v10f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13682,6 +16683,43 @@ define inreg <10 x float> @bitcast_v5f64_to_v10f32_scalar(<5 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v10f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13786,6 +16824,28 @@ define <5 x i64> @bitcast_v10f32_to_v5i64(<10 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v5i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13982,6 +17042,44 @@ define inreg <5 x i64> @bitcast_v10f32_to_v5i64_scalar(<10 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f32_to_v5i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB41_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14095,6 +17193,37 @@ define <10 x float> @bitcast_v5i64_to_v10f32(<5 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB42_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v10f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB42_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14263,6 +17392,39 @@ define inreg <10 x float> @bitcast_v5i64_to_v10f32_scalar(<5 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v10f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB43_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14548,6 +17710,34 @@ define <20 x half> @bitcast_v20i16_to_v20f16(<20 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB44_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v20f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB44_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14910,6 +18100,51 @@ define inreg <20 x half> @bitcast_v20i16_to_v20f16_scalar(<20 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v20f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB45_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15157,6 +18392,34 @@ define <20 x i16> @bitcast_v20f16_to_v20i16(<20 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB46_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v20i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB46_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15515,6 +18778,51 @@ define inreg <20 x i16> @bitcast_v20f16_to_v20i16_scalar(<20 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v20i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16551,6 +19859,268 @@ define <40 x i8> @bitcast_v20i16_to_v40i8(<20 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v20i16_to_v40i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-TRUE16-NEXT: s_clause 0x2
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v20i16_to_v40i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-FAKE16-NEXT: s_clause 0x2
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17524,6 +21094,184 @@ define inreg <40 x i8> @bitcast_v20i16_to_v40i8_scalar(<20 x i16> inreg %a, i32
; GFX11-NEXT: scratch_store_b128 v0, v[13:16], off offset:16
; GFX11-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v40i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s15, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s24, s21, 8
+; GFX13-NEXT: s_lshr_b32 s23, s20, 16
+; GFX13-NEXT: s_lshr_b32 s25, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s29, s19, 8
+; GFX13-NEXT: s_lshr_b32 s28, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 8
+; GFX13-NEXT: s_lshr_b32 s46, s3, 24
+; GFX13-NEXT: s_lshr_b32 s47, s3, 16
+; GFX13-NEXT: s_lshr_b32 s57, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s58, s2, 8
+; GFX13-NEXT: s_lshr_b32 s59, s1, 24
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s62, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s63, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB49_3
+; GFX13-NEXT: .LBB49_2:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: .LBB49_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[12:13], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[14:15], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[15:16], 24, v[9:10]
+; GFX13-NEXT: v_dual_lshrrev_b32 v19, 24, v2 :: v_dual_lshrrev_b32 v18, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v16, 8, v2 :: v_dual_lshrrev_b32 v21, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v17, 8, v1 :: v_dual_lshrrev_b32 v23, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v22, 16, v4 :: v_dual_lshrrev_b32 v20, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 16, v3 :: v_dual_lshrrev_b32 v24, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v28, 24, v6 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 8, v6 :: v_dual_lshrrev_b32 v31, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 8, v5 :: v_dual_lshrrev_b32 v33, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v32, 16, v8 :: v_dual_lshrrev_b32 v30, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v35, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v37, 24, v10 :: v_dual_lshrrev_b32 v36, 16, v10
+; GFX13-NEXT: v_dual_lshrrev_b32 v38, 8, v10 :: v_dual_lshrrev_b32 v48, 16, v9
+; GFX13-NEXT: v_lshrrev_b32_e32 v39, 8, v9
+; GFX13-NEXT: s_branch .LBB49_6
+; GFX13-NEXT: .LBB49_5:
+; GFX13-NEXT: v_dual_mov_b32 v9, s0 :: v_dual_mov_b32 v10, s1
+; GFX13-NEXT: v_dual_mov_b32 v7, s2 :: v_dual_mov_b32 v8, s3
+; GFX13-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v6, s17
+; GFX13-NEXT: v_dual_mov_b32 v3, s18 :: v_dual_mov_b32 v4, s19
+; GFX13-NEXT: v_dual_mov_b32 v1, s20 :: v_dual_mov_b32 v2, s21
+; GFX13-NEXT: v_dual_mov_b32 v39, s63 :: v_dual_mov_b32 v48, s61
+; GFX13-NEXT: v_dual_mov_b32 v38, s62 :: v_dual_mov_b32 v36, s60
+; GFX13-NEXT: v_dual_mov_b32 v37, s59 :: v_dual_mov_b32 v35, s58
+; GFX13-NEXT: v_dual_mov_b32 v34, s56 :: v_dual_mov_b32 v30, s57
+; GFX13-NEXT: v_dual_mov_b32 v32, s47 :: v_dual_mov_b32 v33, s46
+; GFX13-NEXT: v_dual_mov_b32 v29, s45 :: v_dual_mov_b32 v31, s43
+; GFX13-NEXT: v_dual_mov_b32 v25, s44 :: v_dual_mov_b32 v27, s42
+; GFX13-NEXT: v_dual_mov_b32 v28, s41 :: v_dual_mov_b32 v24, s40
+; GFX13-NEXT: v_dual_mov_b32 v26, s28 :: v_dual_mov_b32 v20, s29
+; GFX13-NEXT: v_dual_mov_b32 v22, s27 :: v_dual_mov_b32 v23, s26
+; GFX13-NEXT: v_dual_mov_b32 v17, s25 :: v_dual_mov_b32 v21, s23
+; GFX13-NEXT: v_dual_mov_b32 v16, s24 :: v_dual_mov_b32 v18, s22
+; GFX13-NEXT: v_dual_mov_b32 v19, s15 :: v_dual_mov_b32 v11, s12
+; GFX13-NEXT: v_dual_mov_b32 v12, s10 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s6 :: v_dual_mov_b32 v15, s4
+; GFX13-NEXT: .LBB49_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v9, v39, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v36, v36, v37, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v35, v7, v35, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v34, v14, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v15
+; GFX13-NEXT: v_perm_b32 v15, v32, v33, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v31, v13, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v10, v38, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v31, 16, v36 :: v_dual_bitop2_b32 v7, v9, v7 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v14
+; GFX13-NEXT: v_perm_b32 v14, v8, v30, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v15 :: v_dual_lshlrev_b32 v13, 16, v13
+; GFX13-NEXT: v_perm_b32 v5, v5, v29, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v27, v27, v28, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v11, v21, v11, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v9, v35, v9
+; GFX13-NEXT: v_perm_b32 v6, v6, v25, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v13, v5, v13
+; GFX13-NEXT: v_perm_b32 v5, v26, v12, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v8, v10, v31
+; GFX13-NEXT: v_or_b32_e32 v10, v14, v15
+; GFX13-NEXT: v_perm_b32 v14, v22, v23, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v15, v18, v19, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v12, 16, v27
+; GFX13-NEXT: v_perm_b32 v3, v3, v24, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v4, v4, v20, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v14
+; GFX13-NEXT: v_perm_b32 v1, v1, v17, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_perm_b32 v2, v2, v16, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v17, 16, v15 :: v_dual_bitop2_b32 v14, v6, v12 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v15, v3, v5
+; GFX13-NEXT: v_or_b32_e32 v16, v4, v18
+; GFX13-NEXT: v_or_b32_e32 v1, v1, v11
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v2, v17
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[7:10], off
+; GFX13-NEXT: scratch_store_b128 v0, v[13:16], off offset:16
+; GFX13-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18860,6 +22608,441 @@ define <20 x i16> @bitcast_v40i8_to_v20i16(<40 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v9, v10, v9, 0x5040100
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v20i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x9
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v32, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_b32 v70, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v34, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v37.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v66.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v67.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v49.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v53.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v64.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v65.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v30.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v48.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v52.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v55.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v39.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v51.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v54.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v38.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v50.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x9
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.l, 8, v32.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.h, 8, v33.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.l, 8, v34.h
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v70
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v39, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v50, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v55, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v29, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v36, v30, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v54, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v53, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v21, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v20, v18, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v28, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v27, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v48, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v8.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v32.l, v16.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v31.l, v17.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v31.h, v16.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v68.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v31.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v31.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v66.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v16.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v16.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v17.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v37.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v33.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v49.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v27.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v22.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v48.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v30.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v18.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v23.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v29.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v26.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v54.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v51.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v34.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v21.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v50.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v38.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v10.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v10.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v10.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v20i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v3 :: v_dual_mov_b32 v39, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: s_clause 0x9
+; GFX13-FAKE16-NEXT: scratch_load_u16 v0, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_b32 v1, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v2, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v3, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v15 :: v_dual_mov_b32 v54, v14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v13 :: v_dual_mov_b32 v33, v12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, v11 :: v_dual_mov_b32 v50, v10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, v9 :: v_dual_mov_b32 v52, v8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v7 :: v_dual_mov_b32 v37, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v51, v4
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x9
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v68, 8, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v66, 8, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v65, 8, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v38, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v39, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v37, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v54, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v7, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v9, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v69, v66, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v64, v65, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v71, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v67, v68, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v6, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v14, v13, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v71, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v67, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v69, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v28, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v68, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v66, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v65, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v5, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v55
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v20, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v16, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v33, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v19
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v49
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v16, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v17, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v50, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v51, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v37, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v48
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v39, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v31
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v34
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v24, 8, v36
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v17, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v20, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v22, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v23, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v24, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v18, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v20, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v21, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v15, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v11, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19985,6 +24168,340 @@ define inreg <20 x i16> @bitcast_v40i8_to_v20i16_scalar(<40 x i8> inreg %a, i32
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v9, v9, 16, v16
; GFX11-FAKE16-NEXT: .LBB51_5: ; %end
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v20i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB51_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_and_b32 s59, s43, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s60, s8, 8
+; GFX13-TRUE16-NEXT: s_lshl_b32 s61, s4, 8
+; GFX13-TRUE16-NEXT: s_or_b32 s59, s59, s60
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s2, s3, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s26, s27, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s18, s19, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s45, s14, v8
+; GFX13-TRUE16-NEXT: s_and_b32 s60, s6, 0xff
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s42, s13, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s40, s10, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s60, s60, s61
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s12, s9, v8
+; GFX13-TRUE16-NEXT: s_and_b32 s62, s11, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s61, s7, 8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s60
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s57, s56, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s60, s62, s61
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s47, s44, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s46, s41, v8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s59, s60
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s15, s5, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, s59
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: s_branch .LBB51_3
+; GFX13-TRUE16-NEXT: .LBB51_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: .LBB51_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB51_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s15, s5, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s6, s4, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s11, s7, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s46, s41, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s12, s9, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s47, s44, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s57, s56, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s43, s8, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s45, s14, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s40, s10, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s42, s13, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, s26, s27, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s22, s23, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, s2, s3, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, s18, s19, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, s16, s17, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: .LBB51_5: ; %end
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v20i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB51_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s59, s56, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s60, s42, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s61, s15, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s59, s59, s60
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s20, s21, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s24, s25, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s28, s29, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s26, s27, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s6, s4, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s41, s9, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s40, s12, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s8, s5, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s47, s44, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s11, s7, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s14, s10, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s57, s43, v8
+; GFX13-FAKE16-NEXT: s_and_b32 s60, s45, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: s_and_b32 s62, s46, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s63, s13, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s60, s60, s61
+; GFX13-FAKE16-NEXT: s_or_b32 s61, s62, s63
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s59, s60
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v4, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v12, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v13, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, s61, 16, v8
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, s59
+; GFX13-FAKE16-NEXT: s_branch .LBB51_3
+; GFX13-FAKE16-NEXT: .LBB51_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: .LBB51_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB51_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s57, s43, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s46, s13, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s56, s42, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s45, s15, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s47, s44, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s14, s10, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s40, s12, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s11, s7, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s41, s9, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s6, s4, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s26, s27, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s20, s21, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s22, s23, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, s16, s17, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, s0, s1, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s8, s5, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, s18, s19, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v15, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v16, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v0, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v19, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v3, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v11, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v8, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v9, 16, v16
+; GFX13-FAKE16-NEXT: .LBB51_5: ; %end
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20225,6 +24742,34 @@ define <5 x double> @bitcast_v20i16_to_v5f64(<20 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB52_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v5f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB52_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20552,6 +25097,51 @@ define inreg <5 x double> @bitcast_v20i16_to_v5f64_scalar(<20 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v5f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB53_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20705,6 +25295,29 @@ define <20 x i16> @bitcast_v5f64_to_v20i16(<5 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB54_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v20i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB54_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20946,6 +25559,46 @@ define inreg <20 x i16> @bitcast_v5f64_to_v20i16_scalar(<5 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v20i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21186,6 +25839,34 @@ define <5 x i64> @bitcast_v20i16_to_v5i64(<20 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB56_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v5i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB56_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21513,6 +26194,51 @@ define inreg <5 x i64> @bitcast_v20i16_to_v5i64_scalar(<20 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i16_to_v5i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB57_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21689,6 +26415,37 @@ define <20 x i16> @bitcast_v5i64_to_v20i16(<5 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB58_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v20i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB58_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21917,6 +26674,39 @@ define inreg <20 x i16> @bitcast_v5i64_to_v20i16_scalar(<5 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v20i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB59_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22937,6 +27727,268 @@ define <40 x i8> @bitcast_v20f16_to_v40i8(<20 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v20f16_to_v40i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB60_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB60_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB60_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB60_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-TRUE16-NEXT: s_clause 0x2
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v20f16_to_v40i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB60_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB60_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB60_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB60_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-FAKE16-NEXT: s_clause 0x2
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23975,6 +29027,184 @@ define inreg <40 x i8> @bitcast_v20f16_to_v40i8_scalar(<20 x half> inreg %a, i32
; GFX11-NEXT: scratch_store_b128 v0, v[13:16], off offset:16
; GFX11-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v40i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB61_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s15, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s24, s21, 8
+; GFX13-NEXT: s_lshr_b32 s23, s20, 16
+; GFX13-NEXT: s_lshr_b32 s25, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s29, s19, 8
+; GFX13-NEXT: s_lshr_b32 s28, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 8
+; GFX13-NEXT: s_lshr_b32 s46, s3, 24
+; GFX13-NEXT: s_lshr_b32 s47, s3, 16
+; GFX13-NEXT: s_lshr_b32 s57, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s58, s2, 8
+; GFX13-NEXT: s_lshr_b32 s59, s1, 24
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s62, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s63, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB61_3
+; GFX13-NEXT: .LBB61_2:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: .LBB61_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[12:13], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[14:15], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[15:16], 24, v[9:10]
+; GFX13-NEXT: v_dual_lshrrev_b32 v19, 24, v2 :: v_dual_lshrrev_b32 v18, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v16, 8, v2 :: v_dual_lshrrev_b32 v21, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v17, 8, v1 :: v_dual_lshrrev_b32 v23, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v22, 16, v4 :: v_dual_lshrrev_b32 v20, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 16, v3 :: v_dual_lshrrev_b32 v24, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v28, 24, v6 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 8, v6 :: v_dual_lshrrev_b32 v31, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 8, v5 :: v_dual_lshrrev_b32 v33, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v32, 16, v8 :: v_dual_lshrrev_b32 v30, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v35, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v37, 24, v10 :: v_dual_lshrrev_b32 v36, 16, v10
+; GFX13-NEXT: v_dual_lshrrev_b32 v38, 8, v10 :: v_dual_lshrrev_b32 v48, 16, v9
+; GFX13-NEXT: v_lshrrev_b32_e32 v39, 8, v9
+; GFX13-NEXT: s_branch .LBB61_6
+; GFX13-NEXT: .LBB61_5:
+; GFX13-NEXT: v_dual_mov_b32 v9, s0 :: v_dual_mov_b32 v10, s1
+; GFX13-NEXT: v_dual_mov_b32 v7, s2 :: v_dual_mov_b32 v8, s3
+; GFX13-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v6, s17
+; GFX13-NEXT: v_dual_mov_b32 v3, s18 :: v_dual_mov_b32 v4, s19
+; GFX13-NEXT: v_dual_mov_b32 v1, s20 :: v_dual_mov_b32 v2, s21
+; GFX13-NEXT: v_dual_mov_b32 v39, s63 :: v_dual_mov_b32 v48, s61
+; GFX13-NEXT: v_dual_mov_b32 v38, s62 :: v_dual_mov_b32 v36, s60
+; GFX13-NEXT: v_dual_mov_b32 v37, s59 :: v_dual_mov_b32 v35, s58
+; GFX13-NEXT: v_dual_mov_b32 v34, s56 :: v_dual_mov_b32 v30, s57
+; GFX13-NEXT: v_dual_mov_b32 v32, s47 :: v_dual_mov_b32 v33, s46
+; GFX13-NEXT: v_dual_mov_b32 v29, s45 :: v_dual_mov_b32 v31, s43
+; GFX13-NEXT: v_dual_mov_b32 v25, s44 :: v_dual_mov_b32 v27, s42
+; GFX13-NEXT: v_dual_mov_b32 v28, s41 :: v_dual_mov_b32 v24, s40
+; GFX13-NEXT: v_dual_mov_b32 v26, s28 :: v_dual_mov_b32 v20, s29
+; GFX13-NEXT: v_dual_mov_b32 v22, s27 :: v_dual_mov_b32 v23, s26
+; GFX13-NEXT: v_dual_mov_b32 v17, s25 :: v_dual_mov_b32 v21, s23
+; GFX13-NEXT: v_dual_mov_b32 v16, s24 :: v_dual_mov_b32 v18, s22
+; GFX13-NEXT: v_dual_mov_b32 v19, s15 :: v_dual_mov_b32 v11, s12
+; GFX13-NEXT: v_dual_mov_b32 v12, s10 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s6 :: v_dual_mov_b32 v15, s4
+; GFX13-NEXT: .LBB61_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v9, v39, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v36, v36, v37, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v35, v7, v35, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v34, v14, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v15
+; GFX13-NEXT: v_perm_b32 v15, v32, v33, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v13, v31, v13, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v10, v38, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v31, 16, v36 :: v_dual_bitop2_b32 v7, v9, v7 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v14
+; GFX13-NEXT: v_perm_b32 v14, v8, v30, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v15 :: v_dual_lshlrev_b32 v13, 16, v13
+; GFX13-NEXT: v_perm_b32 v5, v5, v29, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v27, v27, v28, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v11, v21, v11, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v9, v35, v9
+; GFX13-NEXT: v_perm_b32 v6, v6, v25, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v13, v5, v13
+; GFX13-NEXT: v_perm_b32 v5, v26, v12, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v8, v10, v31
+; GFX13-NEXT: v_or_b32_e32 v10, v14, v15
+; GFX13-NEXT: v_perm_b32 v14, v22, v23, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v15, v18, v19, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v12, 16, v27
+; GFX13-NEXT: v_perm_b32 v3, v3, v24, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v5, 16, v5
+; GFX13-NEXT: v_perm_b32 v4, v4, v20, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v18, 16, v14
+; GFX13-NEXT: v_perm_b32 v1, v1, v17, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_perm_b32 v2, v2, v16, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v17, 16, v15 :: v_dual_bitop2_b32 v14, v6, v12 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v15, v3, v5
+; GFX13-NEXT: v_or_b32_e32 v16, v4, v18
+; GFX13-NEXT: v_or_b32_e32 v1, v1, v11
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v2, v17
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[7:10], off
+; GFX13-NEXT: scratch_store_b128 v0, v[13:16], off offset:16
+; GFX13-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25311,6 +30541,441 @@ define <20 x half> @bitcast_v40i8_to_v20f16(<40 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v9, v10, v9, 0x5040100
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v20f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x9
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v32, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_b32 v70, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v33, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v34, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_hi_b16 v31, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v68, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v69, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v37.l, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v66.l, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v67.l, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v49.l, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v53.l, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v64.l, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v65.l, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.l, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.l, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v30.l, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v36.l, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v35.l, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v48.l, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v52.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v55.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v34.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v39.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v51.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v54.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v38.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v50.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x9
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.l, 8, v32.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v16.h, 8, v33.h
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v17.l, 8, v34.h
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v70
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB62_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB62_4
+; GFX13-TRUE16-NEXT: .LBB62_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB62_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v39, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v50, v38, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v55, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v29, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v36, v30, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v37, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v54, v51, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v53, v49, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v21, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v20, v18, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v28, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v27, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v48, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v8.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v32.l, v16.h, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v31.l, v17.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v31.h, v16.l, 0xff bitop3:0xec
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_hi16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB62_2
+; GFX13-TRUE16-NEXT: .LBB62_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v68.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v31.h, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v31.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v66.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v16.l, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v16.h, v1.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v17.l, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v37.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v33.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v49.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v27.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v22.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v48.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v30.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v18.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v23.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v29.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v26.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v54.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v51.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v39.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v34.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v21.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v50.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v38.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v10.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v10.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v10.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v10.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v20f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, v3 :: v_dual_mov_b32 v39, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, v1 :: v_dual_mov_b32 v38, v0
+; GFX13-FAKE16-NEXT: s_clause 0x9
+; GFX13-FAKE16-NEXT: scratch_load_u16 v0, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_b32 v1, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v2, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v3, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v15 :: v_dual_mov_b32 v54, v14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v13 :: v_dual_mov_b32 v33, v12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, v11 :: v_dual_mov_b32 v50, v10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, v9 :: v_dual_mov_b32 v52, v8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v7 :: v_dual_mov_b32 v37, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, v5 :: v_dual_mov_b32 v51, v4
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x9
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v68, 8, v0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x8
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x7
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v66, 8, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x6
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v65, 8, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB62_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB62_4
+; GFX13-FAKE16-NEXT: .LBB62_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB62_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v38, v48, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v39, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v35, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v37, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v54, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v3, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v5, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v7, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v9, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v69, v66, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v64, v65, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v71, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v67, v68, 0xff bitop3:0xec
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v6, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v8, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v12, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v14, v13, 0x5040100
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB62_2
+; GFX13-FAKE16-NEXT: .LBB62_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v71, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v67, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v69, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v29
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v28, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v68, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v66, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v21
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v65, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v5, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v55
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v4, 8, v27
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v20, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v22, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v13, 8, v23
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v4, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v16, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v17
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v13, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v2
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, v33, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v2, 8, v32
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v15, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v19
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v2, v1, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v49
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v16, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v17, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v50, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, v51, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v35
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, v37, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, v38, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v20, 8, v48
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, v39, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v22, 8, v31
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v23, 8, v34
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v24, 8, v36
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v16, v17, v16, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v17, v20, v19, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v19, v22, v21, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v18, v23, v18, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v24, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v16, 0x300, v16
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v20, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v21, 0x300, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v18, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v20, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v21, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v15, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v12, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v14, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v11, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v10, v9, 0x5040100
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26436,6 +32101,340 @@ define inreg <20 x half> @bitcast_v40i8_to_v20f16_scalar(<40 x i8> inreg %a, i32
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v9, v9, 16, v16
; GFX11-FAKE16-NEXT: .LBB63_5: ; %end
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v20f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v21
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v20
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v19
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v18
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v17
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v16
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v15
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s43, v14
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v13
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s41, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s44, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s42, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s45, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB63_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_and_b32 s59, s43, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s60, s8, 8
+; GFX13-TRUE16-NEXT: s_lshl_b32 s61, s4, 8
+; GFX13-TRUE16-NEXT: s_or_b32 s59, s59, s60
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s2, s3, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s26, s27, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s18, s19, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s20, s21, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s45, s14, v8
+; GFX13-TRUE16-NEXT: s_and_b32 s60, s6, 0xff
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s42, s13, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s40, s10, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s60, s60, s61
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s16, s17, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s12, s9, v8
+; GFX13-TRUE16-NEXT: s_and_b32 s62, s11, 0xff
+; GFX13-TRUE16-NEXT: s_lshl_b32 s61, s7, 8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v4.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s28, s29, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v10, s60
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v5.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, s57, s56, v8
+; GFX13-TRUE16-NEXT: s_or_b32 s60, s62, s61
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v6.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, s47, s44, v8
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v7.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, s46, s41, v8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s59, s60
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v9.l
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, s15, s5, v8
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v8, s59
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: s_branch .LBB63_3
+; GFX13-TRUE16-NEXT: .LBB63_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: .LBB63_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB63_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s15, s5, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s6, s4, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s11, s7, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s46, s41, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v4
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s12, s9, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s47, s44, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, s57, s56, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s43, s8, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v4
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, s45, s14, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s20, s21, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s42, s42, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s40, s10, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, s42, s13, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, s26, s27, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v2
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, s22, s23, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v17, s2, s3, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v18, s18, s19, v0
+; GFX13-TRUE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-TRUE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v3
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v19, s16, s17, v0
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v20, 0x300, v1
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v19
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v17.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v16.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v10.l
+; GFX13-TRUE16-NEXT: .LBB63_5: ; %end
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v20f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v21
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v20
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s43, v19
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v18
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v17
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s45, v16
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s42, v15
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v14
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v13
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s44, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s47, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s41, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB63_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_and_b32 s59, s56, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s60, s42, 8
+; GFX13-FAKE16-NEXT: s_lshl_b32 s61, s15, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s59, s59, s60
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s0, s1, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s16, s17, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s20, s21, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s2, s3, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s18, s19, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s22, s23, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, s24, s25, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s28, s29, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, s26, s27, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s6, s4, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, s41, s9, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, s40, s12, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s8, s5, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, s47, s44, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, s11, s7, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, s14, s10, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, s57, s43, v8
+; GFX13-FAKE16-NEXT: s_and_b32 s60, s45, 0xff
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: s_and_b32 s62, s46, 0xff
+; GFX13-FAKE16-NEXT: s_lshl_b32 s63, s13, 8
+; GFX13-FAKE16-NEXT: s_or_b32 s60, s60, s61
+; GFX13-FAKE16-NEXT: s_or_b32 s61, s62, s63
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s59, s60
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v4, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v12, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v13, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, s61, 16, v8
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, s59
+; GFX13-FAKE16-NEXT: s_branch .LBB63_3
+; GFX13-FAKE16-NEXT: .LBB63_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: .LBB63_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB63_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s46, s46, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s56, s56, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s57, s43, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s46, s13, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s56, s42, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s45, s15, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v5, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s47, s44, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s40, s40, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v9, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v6, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v8, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v7, 0x300, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s14, s10, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s40, s12, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s11, s7, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s41, s9, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v11, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v12, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v13, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v14, 0x300, v4
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, s28, s29, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, s6, s4, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, s24, s25, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, s26, s27, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s20, s21, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v16, 0x300, v2
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v4, 0x300, v15
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, s22, s23, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, s16, s17, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, s0, s1, v0
+; GFX13-FAKE16-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-FAKE16-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, s8, s5, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, s18, s19, v0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v18, 0x300, v18
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v17, 0x300, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v15, 0x300, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v19, 0x300, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v15, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v16, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v0, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v19, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v3, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v10, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v11, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v8, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v9, 16, v16
+; GFX13-FAKE16-NEXT: .LBB63_5: ; %end
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26716,6 +32715,34 @@ define <5 x double> @bitcast_v20f16_to_v5f64(<20 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB64_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v5f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB64_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB64_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27090,6 +33117,51 @@ define inreg <5 x double> @bitcast_v20f16_to_v5f64_scalar(<20 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v5f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB65_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB65_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27243,6 +33315,29 @@ define <20 x half> @bitcast_v5f64_to_v20f16(<5 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB66_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v20f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB66_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB66_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27484,6 +33579,46 @@ define inreg <20 x half> @bitcast_v5f64_to_v20f16_scalar(<5 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v20f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB67_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB67_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27764,6 +33899,34 @@ define <5 x i64> @bitcast_v20f16_to_v5i64(<20 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB68_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v5i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB68_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28138,6 +34301,51 @@ define inreg <5 x i64> @bitcast_v20f16_to_v5i64_scalar(<20 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f16_to_v5i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB69_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB69_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28314,6 +34522,37 @@ define <20 x half> @bitcast_v5i64_to_v20f16(<5 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB70_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v20f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB70_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28542,6 +34781,39 @@ define inreg <20 x half> @bitcast_v5i64_to_v20f16_scalar(<5 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v20f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB71_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB71_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29786,6 +36058,432 @@ define <5 x double> @bitcast_v40i8_to_v5f64(<40 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v12
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v5f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x9
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v80, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v48.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v49.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v50.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v51.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v52.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v53.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v54.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v55.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v64.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v65.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v66.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v67.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v68.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v69.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v70.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v71.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v80
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB72_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB72_4
+; GFX13-TRUE16-NEXT: .LBB72_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB72_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v30, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v32, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB72_2
+; GFX13-TRUE16-NEXT: .LBB72_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v71.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v70.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v68.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v66.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v50.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v48.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v29.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v39.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v37.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v33.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v5f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, v1 :: v_dual_mov_b32 v54, v0
+; GFX13-FAKE16-NEXT: s_clause 0x9
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v15 :: v_dual_mov_b32 v31, v14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v13 :: v_dual_mov_b32 v36, v12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v11 :: v_dual_mov_b32 v35, v10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v9 :: v_dual_mov_b32 v39, v8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v7 :: v_dual_mov_b32 v48, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v5 :: v_dual_mov_b32 v50, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v51, v3 :: v_dual_mov_b32 v52, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB72_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB72_4
+; GFX13-FAKE16-NEXT: .LBB72_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB72_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v36, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v31, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v71, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v68, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v66, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v64, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB72_2
+; GFX13-FAKE16-NEXT: .LBB72_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v51
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v50, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v39, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v49
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v48, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v37
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v3, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v31, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v29
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v71, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v66, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v65
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v12, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v69
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v68, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v67
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v55
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v16, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30690,6 +37388,183 @@ define inreg <5 x double> @bitcast_v40i8_to_v5f64_scalar(<40 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v9, v14, v15
; GFX11-NEXT: .LBB73_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i8_to_v5f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-NEXT: v_readfirstlane_b32 s4, v21
+; GFX13-NEXT: v_readfirstlane_b32 s5, v20
+; GFX13-NEXT: v_readfirstlane_b32 s6, v19
+; GFX13-NEXT: v_readfirstlane_b32 s7, v18
+; GFX13-NEXT: v_readfirstlane_b32 s8, v17
+; GFX13-NEXT: v_readfirstlane_b32 s9, v16
+; GFX13-NEXT: v_readfirstlane_b32 s10, v15
+; GFX13-NEXT: v_readfirstlane_b32 s11, v14
+; GFX13-NEXT: v_readfirstlane_b32 s12, v13
+; GFX13-NEXT: v_readfirstlane_b32 s13, v12
+; GFX13-NEXT: v_readfirstlane_b32 s14, v11
+; GFX13-NEXT: v_readfirstlane_b32 s15, v10
+; GFX13-NEXT: v_readfirstlane_b32 s40, v9
+; GFX13-NEXT: v_readfirstlane_b32 s41, v8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v7
+; GFX13-NEXT: v_readfirstlane_b32 s43, v6
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s45, v4
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s47, v2
+; GFX13-NEXT: v_readfirstlane_b32 s56, v1
+; GFX13-NEXT: v_readfirstlane_b32 s57, v0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB73_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v5
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_perm_b32 v6, s45, s44, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v9, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v10, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s5, s4, v5
+; GFX13-NEXT: v_perm_b32 v8, s47, s46, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v9, s43, s42, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v12, s15, s14, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v13, 16, v13
+; GFX13-NEXT: v_perm_b32 v14, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v15, s7, s6, v5
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v10
+; GFX13-NEXT: v_or_b32_e32 v8, v14, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v13
+; GFX13-NEXT: s_branch .LBB73_3
+; GFX13-NEXT: .LBB73_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-NEXT: .LBB73_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-NEXT: v_perm_b32 v11, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s9, s8, v5
+; GFX13-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v14, s7, s6, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v6, s47, s46, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v5
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s45, s44, v5
+; GFX13-NEXT: v_perm_b32 v8, s43, s42, v5
+; GFX13-NEXT: v_perm_b32 v5, s5, s4, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v5 :: v_dual_bitop2_b32 v5, v6, v7 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_or_b32_e32 v8, v12, v13
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v9, v14, v15
+; GFX13-NEXT: .LBB73_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31536,6 +38411,258 @@ define <40 x i8> @bitcast_v5f64_to_v40i8(<5 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v5f64_to_v40i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB74_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB74_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB74_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[9:10], 1.0, v[9:10]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[7:8], 1.0, v[7:8]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[5:6], 1.0, v[5:6]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[3:4], 1.0, v[3:4]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[1:2], 1.0, v[1:2]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB74_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-TRUE16-NEXT: s_clause 0x2
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v5f64_to_v40i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB74_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB74_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB74_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[9:10], 1.0, v[9:10]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[7:8], 1.0, v[7:8]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[5:6], 1.0, v[5:6]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[3:4], 1.0, v[3:4]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[1:2], 1.0, v[1:2]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB74_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-FAKE16-NEXT: s_clause 0x2
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32407,6 +39534,178 @@ define inreg <40 x i8> @bitcast_v5f64_to_v40i8_scalar(<5 x double> inreg %a, i32
; GFX11-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v40i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB75_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s45, s21, 24
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s43, s21, 8
+; GFX13-NEXT: s_lshr_b32 s47, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s20, 8
+; GFX13-NEXT: s_lshr_b32 s42, s19, 24
+; GFX13-NEXT: s_lshr_b32 s41, s19, 16
+; GFX13-NEXT: s_lshr_b32 s40, s19, 8
+; GFX13-NEXT: s_lshr_b32 s57, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s18, 8
+; GFX13-NEXT: s_lshr_b32 s29, s17, 24
+; GFX13-NEXT: s_lshr_b32 s28, s17, 16
+; GFX13-NEXT: s_lshr_b32 s27, s17, 8
+; GFX13-NEXT: s_lshr_b32 s59, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s16, 8
+; GFX13-NEXT: s_lshr_b32 s26, s3, 24
+; GFX13-NEXT: s_lshr_b32 s25, s3, 16
+; GFX13-NEXT: s_lshr_b32 s24, s3, 8
+; GFX13-NEXT: s_lshr_b32 s61, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s2, 8
+; GFX13-NEXT: s_lshr_b32 s23, s1, 24
+; GFX13-NEXT: s_lshr_b32 s22, s1, 16
+; GFX13-NEXT: s_lshr_b32 s15, s1, 8
+; GFX13-NEXT: s_lshr_b32 s63, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB75_3
+; GFX13-NEXT: .LBB75_2:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: .LBB75_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[5:6], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[1:2], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[7:8], s[2:3], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[3:4], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[0:1], 1.0
+; GFX13-NEXT: v_lshrrev_b64 v[14:15], 24, v[5:6]
+; GFX13-NEXT: v_lshrrev_b64 v[9:10], 24, v[1:2]
+; GFX13-NEXT: v_lshrrev_b64 v[15:16], 24, v[7:8]
+; GFX13-NEXT: v_lshrrev_b64 v[10:11], 24, v[3:4]
+; GFX13-NEXT: v_lshrrev_b64 v[16:17], 24, v[12:13]
+; GFX13-NEXT: v_dual_lshrrev_b32 v18, 24, v2 :: v_dual_lshrrev_b32 v20, 16, v2
+; GFX13-NEXT: v_dual_lshrrev_b32 v17, 8, v2 :: v_dual_lshrrev_b32 v19, 16, v1
+; GFX13-NEXT: v_dual_lshrrev_b32 v11, 8, v1 :: v_dual_lshrrev_b32 v24, 24, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v25, 16, v4 :: v_dual_lshrrev_b32 v21, 8, v4
+; GFX13-NEXT: v_dual_lshrrev_b32 v23, 16, v3 :: v_dual_lshrrev_b32 v22, 8, v3
+; GFX13-NEXT: v_dual_lshrrev_b32 v29, 24, v6 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-NEXT: v_dual_lshrrev_b32 v27, 8, v6 :: v_dual_lshrrev_b32 v28, 16, v5
+; GFX13-NEXT: v_dual_lshrrev_b32 v26, 8, v5 :: v_dual_lshrrev_b32 v36, 24, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v37, 16, v8 :: v_dual_lshrrev_b32 v33, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v31, 16, v7 :: v_dual_lshrrev_b32 v32, 8, v7
+; GFX13-NEXT: v_dual_lshrrev_b32 v38, 24, v13 :: v_dual_lshrrev_b32 v39, 16, v13
+; GFX13-NEXT: v_dual_lshrrev_b32 v48, 8, v13 :: v_dual_lshrrev_b32 v34, 16, v12
+; GFX13-NEXT: v_lshrrev_b32_e32 v35, 8, v12
+; GFX13-NEXT: s_branch .LBB75_6
+; GFX13-NEXT: .LBB75_5:
+; GFX13-NEXT: v_dual_mov_b32 v12, s0 :: v_dual_mov_b32 v7, s2
+; GFX13-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v3, s18
+; GFX13-NEXT: v_dual_mov_b32 v1, s20 :: v_dual_mov_b32 v2, s21
+; GFX13-NEXT: v_dual_mov_b32 v4, s19 :: v_dual_mov_b32 v6, s17
+; GFX13-NEXT: v_dual_mov_b32 v8, s3 :: v_dual_mov_b32 v13, s1
+; GFX13-NEXT: v_dual_mov_b32 v34, s63 :: v_dual_mov_b32 v35, s62
+; GFX13-NEXT: v_dual_mov_b32 v31, s61 :: v_dual_mov_b32 v32, s60
+; GFX13-NEXT: v_dual_mov_b32 v28, s59 :: v_dual_mov_b32 v26, s58
+; GFX13-NEXT: v_dual_mov_b32 v23, s57 :: v_dual_mov_b32 v22, s56
+; GFX13-NEXT: v_dual_mov_b32 v19, s47 :: v_dual_mov_b32 v11, s46
+; GFX13-NEXT: v_dual_mov_b32 v16, s4 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v14, s8 :: v_dual_mov_b32 v10, s10
+; GFX13-NEXT: v_dual_mov_b32 v9, s12 :: v_dual_mov_b32 v18, s45
+; GFX13-NEXT: v_dual_mov_b32 v20, s44 :: v_dual_mov_b32 v17, s43
+; GFX13-NEXT: v_dual_mov_b32 v24, s42 :: v_dual_mov_b32 v25, s41
+; GFX13-NEXT: v_dual_mov_b32 v21, s40 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s28 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v36, s26 :: v_dual_mov_b32 v37, s25
+; GFX13-NEXT: v_dual_mov_b32 v33, s24 :: v_dual_mov_b32 v38, s23
+; GFX13-NEXT: v_dual_mov_b32 v39, s22 :: v_dual_mov_b32 v48, s15
+; GFX13-NEXT: .LBB75_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v16, v34, v16, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v12, v12, v35, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v34, v39, v38, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v15, v31, v15, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v31, v37, v36, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v16, 16, v16
+; GFX13-NEXT: v_perm_b32 v7, v7, v32, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v14, v28, v14, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v28, 16, v34
+; GFX13-NEXT: v_perm_b32 v8, v8, v33, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v15 :: v_dual_bitop2_b32 v12, v12, v16 bitop3:0x54
+; GFX13-NEXT: v_lshlrev_b32_e32 v16, 16, v31
+; GFX13-NEXT: v_perm_b32 v13, v13, v48, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v5, v5, v26, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_lshlrev_b32 v26, 16, v14 :: v_dual_bitop2_b32 v14, v7, v15 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v7, v30, v29, 0xc0c0004
+; GFX13-NEXT: v_or_b32_e32 v15, v8, v16
+; GFX13-NEXT: v_perm_b32 v8, v23, v10, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v10, v25, v24, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v9, v19, v9, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v16, v20, v18, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v7, 16, v7 :: v_dual_bitop2_b32 v13, v13, v28 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v6, v6, v27, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v3, v3, v22, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v4, v4, v21, 0xc0c0004
+; GFX13-NEXT: v_lshlrev_b32_e32 v10, 16, v10
+; GFX13-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_bitop2_b32 v5, v5, v26 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v1, v1, v11, 0xc0c0004
+; GFX13-NEXT: v_perm_b32 v2, v2, v17, 0xc0c0004
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v16 :: v_dual_bitop2_b32 v6, v6, v7 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v7, v3, v8
+; GFX13-NEXT: v_or_b32_e32 v8, v4, v10
+; GFX13-NEXT: v_or_b32_e32 v1, v1, v9
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v2, v2, v11
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[12:15], off
+; GFX13-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-NEXT: scratch_store_b64 v0, v[1:2], off offset:32
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33651,6 +40950,432 @@ define <5 x i64> @bitcast_v40i8_to_v5i64(<40 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v12
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i8_to_v5i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: s_clause 0x9
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v31, off, s32 offset:32
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v32, off, s32 offset:28
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v33, off, s32 offset:24
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v34, off, s32 offset:20
+; GFX13-TRUE16-NEXT: scratch_load_b32 v80, off, s32 offset:36
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v35, off, s32 offset:16
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v36, off, s32 offset:12
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v37, off, s32 offset:8
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v38, off, s32 offset:4
+; GFX13-TRUE16-NEXT: scratch_load_d16_b16 v39, off, s32
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v48.l, v15.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v49.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v50.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v51.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v52.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v53.l, v10.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v54.l, v9.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v55.l, v8.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v64.l, v7.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v65.l, v6.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v66.l, v5.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v67.l, v4.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v68.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v69.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v70.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v71.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v80
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB76_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB76_4
+; GFX13-TRUE16-NEXT: .LBB76_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB76_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v71, v70, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v69, v68, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v67, v66, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v65, v64, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v55, v54, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v53, v52, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v51, v50, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v49, v48, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v30, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v36, v35, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v34, v33, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v32, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-TRUE16-NEXT: .LBB76_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v71.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v70.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v69.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v68.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v67.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v66.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v65.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v64.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, v55.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.h, 8, v54.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v4.h, v4.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v53.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v52.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v51.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v50.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v49.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v48.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.l, 8, v17.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, v18.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.l, 8, v19.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.h, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.l, v6.l, v5.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v4.h, v7.l, v6.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, v20.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.h, 8, v21.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, v22.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v6.h, 8, v23.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, v24.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v7.h, 8, v25.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, v26.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.h, 8, v27.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, v28.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.h, 8, v29.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.l, v5.h, v5.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v5.h, v6.h, v6.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.l, v7.h, v7.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v6.h, v8.h, v8.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.l, v9.h, v9.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, v30.l, 3
+; GFX13-TRUE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v8.l, 8, v39.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, v38.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v9.l, 8, v37.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, v36.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v10.l, 8, v35.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v10.h, v34.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v11.l, 8, v33.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v11.h, v32.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v12.l, 8, v31.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v7.h, v8.l, v7.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.l, v9.l, v8.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v8.h, v10.l, v9.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.l, v11.l, v10.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v9.h, v12.l, v11.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, 0x300, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, 0x300, v3.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.l, 0x300, v4.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, 0x300, v4.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.l, 0x300, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v5.h, 0x300, v5.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.l, 0x300, v6.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v6.h, 0x300, v6.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.l, 0x300, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v7.h, 0x300, v7.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.l, 0x300, v8.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v8.h, 0x300, v8.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.l, 0x300, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v9.h, 0x300, v9.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i8_to_v5i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, v1 :: v_dual_mov_b32 v54, v0
+; GFX13-FAKE16-NEXT: s_clause 0x9
+; GFX13-FAKE16-NEXT: scratch_load_u16 v55, off, s32 offset:32
+; GFX13-FAKE16-NEXT: scratch_load_u16 v64, off, s32 offset:28
+; GFX13-FAKE16-NEXT: scratch_load_u16 v65, off, s32 offset:24
+; GFX13-FAKE16-NEXT: scratch_load_u16 v66, off, s32 offset:20
+; GFX13-FAKE16-NEXT: scratch_load_b32 v0, off, s32 offset:36
+; GFX13-FAKE16-NEXT: scratch_load_u16 v67, off, s32 offset:16
+; GFX13-FAKE16-NEXT: scratch_load_u16 v68, off, s32 offset:12
+; GFX13-FAKE16-NEXT: scratch_load_u16 v70, off, s32 offset:8
+; GFX13-FAKE16-NEXT: scratch_load_u16 v71, off, s32 offset:4
+; GFX13-FAKE16-NEXT: scratch_load_u16 v69, off, s32
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, v15 :: v_dual_mov_b32 v31, v14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, v13 :: v_dual_mov_b32 v36, v12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, v11 :: v_dual_mov_b32 v35, v10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, v9 :: v_dual_mov_b32 v39, v8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, v7 :: v_dual_mov_b32 v48, v6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, v5 :: v_dual_mov_b32 v50, v4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v51, v3 :: v_dual_mov_b32 v52, v2
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x5
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB76_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB76_4
+; GFX13-FAKE16-NEXT: .LBB76_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB76_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v54, v53, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v52, v51, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v50, v49, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v38, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v33, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v36, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v31, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v16, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v18, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v9, 16, v8
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v20, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v22, v23, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v24, v25, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v26, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v69, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v71, v70, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v68, v67, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v66, v65, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v64, v55, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v6, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v10, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v12, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-FAKE16-NEXT: .LBB76_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v54, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v53
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v52, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v51
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v50, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v39, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v49
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v38
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v48, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v37
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v16, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v3, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v17
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v36, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v35, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v9, 8, v33
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v32
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v8, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v31, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v18, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v19
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v9, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v20, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v6, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v5, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v8, 16, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v24, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v25
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, v22, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v28, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v10, 8, v29
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v23
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v6, v7, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, v26, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v12, 8, v27
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v9, v10, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v8, v11, v8, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, v71, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v11, 8, v70
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, v66, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v14, 8, v65
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v7, v12, v7, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, v30, 3
+; GFX13-FAKE16-NEXT: s_wait_loadcnt 0x0
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v15, 8, v69
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v10, v11, v10, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, v68, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v16, 8, v67
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v13, v14, v13, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, v64, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v17, 8, v55
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, 0x300, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, 0x300, v9
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v12, v15, v12, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v10, 0x300, v10
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v11, v16, v11, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v13, 0x300, v13
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v14, v17, v14, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v8, 0x300, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v7, 0x300, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v12, 0x300, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v11, 0x300, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v14, 0x300, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v8, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v11, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v14, 16, v13
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34555,6 +42280,183 @@ define inreg <5 x i64> @bitcast_v40i8_to_v5i64_scalar(<40 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v9, v14, v15
; GFX11-NEXT: .LBB77_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i8_to_v5i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s58, v22
+; GFX13-NEXT: v_readfirstlane_b32 s4, v21
+; GFX13-NEXT: v_readfirstlane_b32 s5, v20
+; GFX13-NEXT: v_readfirstlane_b32 s6, v19
+; GFX13-NEXT: v_readfirstlane_b32 s7, v18
+; GFX13-NEXT: v_readfirstlane_b32 s8, v17
+; GFX13-NEXT: v_readfirstlane_b32 s9, v16
+; GFX13-NEXT: v_readfirstlane_b32 s10, v15
+; GFX13-NEXT: v_readfirstlane_b32 s11, v14
+; GFX13-NEXT: v_readfirstlane_b32 s12, v13
+; GFX13-NEXT: v_readfirstlane_b32 s13, v12
+; GFX13-NEXT: v_readfirstlane_b32 s14, v11
+; GFX13-NEXT: v_readfirstlane_b32 s15, v10
+; GFX13-NEXT: v_readfirstlane_b32 s40, v9
+; GFX13-NEXT: v_readfirstlane_b32 s41, v8
+; GFX13-NEXT: v_readfirstlane_b32 s42, v7
+; GFX13-NEXT: v_readfirstlane_b32 s43, v6
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s45, v4
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s47, v2
+; GFX13-NEXT: v_readfirstlane_b32 s56, v1
+; GFX13-NEXT: v_readfirstlane_b32 s57, v0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB77_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_perm_b32 v11, s9, s8, v5
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s41, s40, v5
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_perm_b32 v6, s45, s44, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_bitop2_b32 v4, v9, v10 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v10, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s5, s4, v5
+; GFX13-NEXT: v_perm_b32 v8, s47, s46, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v9, s43, s42, v5
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v12, s15, s14, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v10, 16, v10 :: v_dual_lshlrev_b32 v13, 16, v13
+; GFX13-NEXT: v_perm_b32 v14, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v15, s7, s6, v5
+; GFX13-NEXT: v_or_b32_e32 v5, v8, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v12, v10
+; GFX13-NEXT: v_or_b32_e32 v8, v14, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v13
+; GFX13-NEXT: s_branch .LBB77_3
+; GFX13-NEXT: .LBB77_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
+; GFX13-NEXT: .LBB77_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v5, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: v_perm_b32 v6, s22, s23, v5
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s57, s57, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: v_lshlrev_b32_e32 v6, 16, v6
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v5
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v5
+; GFX13-NEXT: v_perm_b32 v2, s16, s17, v5
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v5
+; GFX13-NEXT: v_perm_b32 v4, s20, s21, v5
+; GFX13-NEXT: v_perm_b32 v7, s24, s25, v5
+; GFX13-NEXT: v_perm_b32 v8, s26, s27, v5
+; GFX13-NEXT: v_perm_b32 v9, s28, s29, v5
+; GFX13-NEXT: v_perm_b32 v10, s57, s56, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v3, 16, v3
+; GFX13-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-NEXT: v_dual_lshlrev_b32 v8, 16, v8 :: v_dual_lshlrev_b32 v10, 16, v10
+; GFX13-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-NEXT: v_perm_b32 v11, s13, s12, v5
+; GFX13-NEXT: v_perm_b32 v13, s9, s8, v5
+; GFX13-NEXT: s_add_co_i32 s47, s47, 3
+; GFX13-NEXT: s_add_co_i32 s45, s45, 3
+; GFX13-NEXT: s_add_co_i32 s43, s43, 3
+; GFX13-NEXT: s_add_co_i32 s41, s41, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: v_or_b32_e32 v1, v2, v3
+; GFX13-NEXT: v_perm_b32 v12, s11, s10, v5
+; GFX13-NEXT: v_perm_b32 v14, s7, s6, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v11, 0x300, v11
+; GFX13-NEXT: v_or_b32_e32 v2, v4, v6
+; GFX13-NEXT: v_or_b32_e32 v4, v9, v10
+; GFX13-NEXT: v_perm_b32 v6, s47, s46, v5
+; GFX13-NEXT: v_perm_b32 v9, s41, s40, v5
+; GFX13-NEXT: v_perm_b32 v10, s15, s14, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v13, 0x300, v13
+; GFX13-NEXT: v_or_b32_e32 v3, v7, v8
+; GFX13-NEXT: v_perm_b32 v7, s45, s44, v5
+; GFX13-NEXT: v_perm_b32 v8, s43, s42, v5
+; GFX13-NEXT: v_perm_b32 v5, s5, s4, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v6, 0x300, v6
+; GFX13-NEXT: v_add_nc_u32_e32 v9, 0x300, v9
+; GFX13-NEXT: v_add_nc_u32_e32 v7, 0x300, v7
+; GFX13-NEXT: v_add_nc_u32_e32 v8, 0x300, v8
+; GFX13-NEXT: v_add_nc_u32_e32 v10, 0x300, v10
+; GFX13-NEXT: v_add_nc_u32_e32 v12, 0x300, v12
+; GFX13-NEXT: v_add_nc_u32_e32 v14, 0x300, v14
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX13-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-NEXT: v_lshlrev_b32_e32 v11, 16, v11
+; GFX13-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-NEXT: v_lshlrev_b32_e32 v13, 16, v13
+; GFX13-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-NEXT: v_dual_lshlrev_b32 v15, 16, v5 :: v_dual_bitop2_b32 v5, v6, v7 bitop3:0x54
+; GFX13-NEXT: v_or_b32_e32 v6, v8, v9
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v11
+; GFX13-NEXT: v_or_b32_e32 v8, v12, v13
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v9, v14, v15
+; GFX13-NEXT: .LBB77_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35432,6 +43334,274 @@ define <40 x i8> @bitcast_v5i64_to_v40i8(<5 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v5i64_to_v40i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr12_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr17_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB78_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB78_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB78_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, v3, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v4, null, 0, v4, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v5, vcc_lo, v5, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v6, null, 0, v6, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v7, vcc_lo, v7, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v8, null, 0, v8, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v9, vcc_lo, v9, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v10, null, 0, v10, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v1, vcc_lo, v1, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v2, null, 0, v2, vcc_lo
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-TRUE16-NEXT: .LBB78_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-TRUE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-TRUE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-TRUE16-NEXT: s_clause 0x2
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-TRUE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-TRUE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v5i64_to_v40i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr17
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB78_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB78_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB78_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v3, vcc_lo, v3, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v4, null, 0, v4, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v5, vcc_lo, v5, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v6, null, 0, v6, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v7, vcc_lo, v7, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v8, null, 0, v8, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v9, vcc_lo, v9, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v10, null, 0, v10, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v1, vcc_lo, v1, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v2, null, 0, v2, vcc_lo
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[9:10]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[12:13], 24, v[7:8]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[5:6]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[14:15], 24, v[3:4]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[1:2]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v17, 24, v10 :: v_dual_lshrrev_b32 v18, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 8, v10 :: v_dual_lshrrev_b32 v20, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 8, v9 :: v_dual_lshrrev_b32 v22, 24, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v24, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v7 :: v_dual_lshrrev_b32 v26, 8, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 24, v6 :: v_dual_lshrrev_b32 v28, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 8, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 8, v5 :: v_dual_lshrrev_b32 v32, 24, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 8, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v3 :: v_dual_lshrrev_b32 v36, 8, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 24, v2 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 8, v2 :: v_dual_lshrrev_b32 v48, 16, v1
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 8, v1
+; GFX13-FAKE16-NEXT: .LBB78_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v3, v36, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v5, v31, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v1, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v2, v39, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v38, v37, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v4, v34, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v32, v33, v32, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v14, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v13, 16, v5
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v6, v29, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v28, v27, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v7, v26, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v25, v12, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v8, v24, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v23, v22, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v15, 16, v1
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v9, v21, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v20, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v10, v19, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v18, v17, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v16, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v32, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v13, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v12, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v14, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v11, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v15, 16, v10
+; GFX13-FAKE16-NEXT: s_clause 0x2
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-FAKE16-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-FAKE16-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36235,6 +44405,169 @@ define inreg <40 x i8> @bitcast_v5i64_to_v40i8_scalar(<5 x i64> inreg %a, i32 in
; GFX11-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
; GFX11-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v40i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s63, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB79_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s15, s21, 8
+; GFX13-NEXT: s_lshr_b32 s24, s20, 16
+; GFX13-NEXT: s_lshr_b32 s23, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s25, s19, 8
+; GFX13-NEXT: s_lshr_b32 s29, s18, 16
+; GFX13-NEXT: s_lshr_b32 s28, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s44, s16, 8
+; GFX13-NEXT: s_lshr_b32 s45, s3, 24
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s57, s2, 8
+; GFX13-NEXT: s_lshr_b32 s58, s1, 24
+; GFX13-NEXT: s_lshr_b32 s59, s1, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB79_3
+; GFX13-NEXT: .LBB79_2:
+; GFX13-NEXT: s_mov_b32 s63, -1
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr28
+; GFX13-NEXT: ; implicit-def: $sgpr29
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr25
+; GFX13-NEXT: ; implicit-def: $sgpr27
+; GFX13-NEXT: ; implicit-def: $sgpr26
+; GFX13-NEXT: ; implicit-def: $sgpr23
+; GFX13-NEXT: ; implicit-def: $sgpr24
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr22
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB79_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s63, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[20:21], 24
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[18:19], 24
+; GFX13-NEXT: s_lshr_b64 s[8:9], s[16:17], 24
+; GFX13-NEXT: s_lshr_b64 s[10:11], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[12:13], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s14, s21, 24
+; GFX13-NEXT: s_lshr_b32 s22, s21, 16
+; GFX13-NEXT: s_lshr_b32 s15, s21, 8
+; GFX13-NEXT: s_lshr_b32 s24, s20, 16
+; GFX13-NEXT: s_lshr_b32 s23, s20, 8
+; GFX13-NEXT: s_lshr_b32 s26, s19, 24
+; GFX13-NEXT: s_lshr_b32 s27, s19, 16
+; GFX13-NEXT: s_lshr_b32 s25, s19, 8
+; GFX13-NEXT: s_lshr_b32 s29, s18, 16
+; GFX13-NEXT: s_lshr_b32 s28, s18, 8
+; GFX13-NEXT: s_lshr_b32 s41, s17, 24
+; GFX13-NEXT: s_lshr_b32 s42, s17, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 8
+; GFX13-NEXT: s_lshr_b32 s43, s16, 16
+; GFX13-NEXT: s_lshr_b32 s44, s16, 8
+; GFX13-NEXT: s_lshr_b32 s45, s3, 24
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s3, 8
+; GFX13-NEXT: s_lshr_b32 s56, s2, 16
+; GFX13-NEXT: s_lshr_b32 s57, s2, 8
+; GFX13-NEXT: s_lshr_b32 s58, s1, 24
+; GFX13-NEXT: s_lshr_b32 s59, s1, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 8
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_lshr_b32 s62, s0, 8
+; GFX13-NEXT: .LBB79_5: ; %end
+; GFX13-NEXT: v_mov_b32_e32 v6, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v7, s56, s10, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v2, s61, s12, v6
+; GFX13-NEXT: v_perm_b32 v4, s59, s58, v6
+; GFX13-NEXT: v_perm_b32 v9, s46, s45, v6
+; GFX13-NEXT: v_perm_b32 v11, s43, s8, v6
+; GFX13-NEXT: v_perm_b32 v1, s0, s62, v6
+; GFX13-NEXT: v_perm_b32 v3, s1, s60, v6
+; GFX13-NEXT: v_perm_b32 v5, s2, s57, v6
+; GFX13-NEXT: v_perm_b32 v8, s3, s47, v6
+; GFX13-NEXT: v_perm_b32 v10, s16, s44, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_dual_lshlrev_b32 v9, 16, v9 :: v_dual_lshlrev_b32 v11, 16, v11
+; GFX13-NEXT: v_perm_b32 v12, s24, s4, v6
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v1, v1, v2
+; GFX13-NEXT: v_or_b32_e32 v2, v3, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_or_b32_e32 v4, v8, v9
+; GFX13-NEXT: v_perm_b32 v8, s29, s6, v6
+; GFX13-NEXT: v_or_b32_e32 v3, v5, v7
+; GFX13-NEXT: v_perm_b32 v7, s42, s41, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v12, 16, v12 :: v_dual_bitop2_b32 v5, v10, v11 bitop3:0x54
+; GFX13-NEXT: v_perm_b32 v11, s27, s26, v6
+; GFX13-NEXT: v_perm_b32 v14, s22, s14, v6
+; GFX13-NEXT: v_perm_b32 v9, s17, s40, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v7, 16, v7
+; GFX13-NEXT: v_perm_b32 v10, s18, s28, v6
+; GFX13-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX13-NEXT: v_perm_b32 v13, s19, s25, v6
+; GFX13-NEXT: v_dual_lshlrev_b32 v11, 16, v11 :: v_dual_lshlrev_b32 v14, 16, v14
+; GFX13-NEXT: v_perm_b32 v15, s20, s23, v6
+; GFX13-NEXT: v_perm_b32 v16, s21, s15, v6
+; GFX13-NEXT: v_or_b32_e32 v6, v9, v7
+; GFX13-NEXT: v_or_b32_e32 v7, v10, v8
+; GFX13-NEXT: v_or_b32_e32 v8, v13, v11
+; GFX13-NEXT: v_or_b32_e32 v9, v15, v12
+; GFX13-NEXT: v_or_b32_e32 v10, v16, v14
+; GFX13-NEXT: s_clause 0x2
+; GFX13-NEXT: scratch_store_b128 v0, v[1:4], off
+; GFX13-NEXT: scratch_store_b128 v0, v[5:8], off offset:16
+; GFX13-NEXT: scratch_store_b64 v0, v[9:10], off offset:32
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36325,6 +44658,29 @@ define <5 x i64> @bitcast_v5f64_to_v5i64(<5 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB80_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v5i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB80_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: .LBB80_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36501,6 +44857,46 @@ define inreg <5 x i64> @bitcast_v5f64_to_v5i64_scalar(<5 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5f64_to_v5i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB81_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB81_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36614,6 +45010,37 @@ define <5 x double> @bitcast_v5i64_to_v5f64(<5 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB82_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v5f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v10
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB82_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: .LBB82_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36781,6 +45208,38 @@ define inreg <5 x double> @bitcast_v5i64_to_v5f64_scalar(<5 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v5i64_to_v5f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s22, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB83_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: .LBB83_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.32bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.32bit.ll
index 38a3d781676ef..f31763ca1e221 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.32bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.32bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define float @bitcast_i32_to_f32(i32 %a, i32 %b) #0 {
; SI-LABEL: bitcast_i32_to_f32:
@@ -59,6 +61,24 @@ define float @bitcast_i32_to_f32(i32 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -160,6 +180,31 @@ define inreg float @bitcast_i32_to_f32_scalar(i32 inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -230,6 +275,24 @@ define i32 @bitcast_f32_to_i32(float %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -334,6 +397,31 @@ define inreg i32 @bitcast_f32_to_i32_scalar(float inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: .LBB3_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -412,6 +500,24 @@ define <2 x i16> @bitcast_i32_to_v2i16(i32 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v2i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -519,6 +625,31 @@ define inreg <2 x i16> @bitcast_i32_to_v2i16_scalar(i32 inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v2i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -611,6 +742,24 @@ define i32 @bitcast_v2i16_to_i32(<2 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -726,6 +875,31 @@ define inreg i32 @bitcast_v2i16_to_i32_scalar(<2 x i16> inreg %a, i32 inreg %b)
; GFX11-NEXT: .LBB7_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -804,6 +978,24 @@ define <2 x half> @bitcast_i32_to_v2f16(i32 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v2f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -911,6 +1103,31 @@ define inreg <2 x half> @bitcast_i32_to_v2f16_scalar(i32 inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v2f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1003,6 +1220,24 @@ define i32 @bitcast_v2f16_to_i32(<2 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1125,6 +1360,31 @@ define inreg i32 @bitcast_v2f16_to_i32_scalar(<2 x half> inreg %a, i32 inreg %b)
; GFX11-NEXT: .LBB11_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1208,6 +1468,24 @@ define <2 x bfloat> @bitcast_i32_to_v2bf16(i32 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v2bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1318,6 +1596,31 @@ define inreg <2 x bfloat> @bitcast_i32_to_v2bf16_scalar(i32 inreg %a, i32 inreg
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v2bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1498,6 +1801,24 @@ define i32 @bitcast_v2bf16_to_i32(<2 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1716,6 +2037,31 @@ define inreg i32 @bitcast_v2bf16_to_i32_scalar(<2 x bfloat> inreg %a, i32 inreg
; GFX11-FAKE16-NEXT: .LBB15_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1786,6 +2132,24 @@ define <1 x i32> @bitcast_i32_to_v1i32(i32 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v1i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1887,6 +2251,31 @@ define inreg <1 x i32> @bitcast_i32_to_v1i32_scalar(i32 inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v1i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1957,6 +2346,24 @@ define i32 @bitcast_v1i32_to_i32(<1 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2058,6 +2465,31 @@ define inreg i32 @bitcast_v1i32_to_i32_scalar(<1 x i32> inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB19_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2226,6 +2658,71 @@ define <4 x i8> @bitcast_i32_to_v4i8(i32 %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_i32_to_v4i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_branch .LBB20_3
+; GFX13-TRUE16-NEXT: .LBB20_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: .LBB20_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_i32_to_v4i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB20_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB20_4
+; GFX13-FAKE16-NEXT: .LBB20_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB20_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-FAKE16-NEXT: .LBB20_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2376,6 +2873,44 @@ define inreg <4 x i8> @bitcast_i32_to_v4i8_scalar(i32 inreg %a, i32 inreg %b) #0
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s3
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i32_to_v4i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB21_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s1, s0, 24
+; GFX13-NEXT: s_lshr_b32 s2, s0, 16
+; GFX13-NEXT: s_lshr_b32 s3, s0, 8
+; GFX13-NEXT: s_branch .LBB21_3
+; GFX13-NEXT: .LBB21_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr1
+; GFX13-NEXT: .LBB21_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_lshr_b32 s2, s0, 16
+; GFX13-NEXT: s_lshr_b32 s1, s0, 24
+; GFX13-NEXT: s_lshr_b32 s3, s0, 8
+; GFX13-NEXT: .LBB21_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s3
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2608,6 +3143,97 @@ define i32 @bitcast_v4i8_to_i32(<4 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i8_to_i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB22_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB22_4
+; GFX13-TRUE16-NEXT: .LBB22_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB22_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-TRUE16-NEXT: .LBB22_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v5.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i8_to_i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v5, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB22_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB22_4
+; GFX13-FAKE16-NEXT: .LBB22_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB22_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-FAKE16-NEXT: .LBB22_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v5, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2785,6 +3411,51 @@ define inreg i32 @bitcast_v4i8_to_i32_scalar(<4 x i8> inreg %a, i32 inreg %b) #0
; GFX11-NEXT: v_or_b32_e32 v0, v1, v0
; GFX11-NEXT: .LBB23_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i8_to_i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB23_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: s_branch .LBB23_3
+; GFX13-NEXT: .LBB23_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0
+; GFX13-NEXT: .LBB23_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: .LBB23_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2863,6 +3534,24 @@ define <2 x i16> @bitcast_f32_to_v2i16(float %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v2i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2975,6 +3664,31 @@ define inreg <2 x i16> @bitcast_f32_to_v2i16_scalar(float inreg %a, i32 inreg %b
; GFX11-NEXT: .LBB25_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v2i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3067,6 +3781,24 @@ define float @bitcast_v2i16_to_f32(<2 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3182,6 +3914,31 @@ define inreg float @bitcast_v2i16_to_f32_scalar(<2 x i16> inreg %a, i32 inreg %b
; GFX11-NEXT: .LBB27_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3260,6 +4017,24 @@ define <2 x half> @bitcast_f32_to_v2f16(float %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v2f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3372,6 +4147,31 @@ define inreg <2 x half> @bitcast_f32_to_v2f16_scalar(float inreg %a, i32 inreg %
; GFX11-NEXT: .LBB29_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v2f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3464,6 +4264,24 @@ define float @bitcast_v2f16_to_f32(<2 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3586,6 +4404,31 @@ define inreg float @bitcast_v2f16_to_f32_scalar(<2 x half> inreg %a, i32 inreg %
; GFX11-NEXT: .LBB31_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3669,6 +4512,24 @@ define <2 x bfloat> @bitcast_f32_to_v2bf16(float %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v2bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3785,6 +4646,31 @@ define inreg <2 x bfloat> @bitcast_f32_to_v2bf16_scalar(float inreg %a, i32 inre
; GFX11-NEXT: .LBB33_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v2bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3965,6 +4851,24 @@ define float @bitcast_v2bf16_to_f32(<2 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4183,6 +5087,31 @@ define inreg float @bitcast_v2bf16_to_f32_scalar(<2 x bfloat> inreg %a, i32 inre
; GFX11-FAKE16-NEXT: .LBB35_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4253,6 +5182,24 @@ define <1 x i32> @bitcast_f32_to_v1i32(float %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v1i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4357,6 +5304,31 @@ define inreg <1 x i32> @bitcast_f32_to_v1i32_scalar(float inreg %a, i32 inreg %b
; GFX11-NEXT: .LBB37_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v1i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4427,6 +5399,24 @@ define float @bitcast_v1i32_to_f32(<1 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4528,6 +5518,31 @@ define inreg float @bitcast_v1i32_to_f32_scalar(<1 x i32> inreg %a, i32 inreg %b
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB39_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4696,6 +5711,71 @@ define <4 x i8> @bitcast_f32_to_v4i8(float %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_f32_to_v4i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_branch .LBB40_3
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: .LBB40_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_f32_to_v4i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB40_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB40_4
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB40_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4849,6 +5929,44 @@ define inreg <4 x i8> @bitcast_f32_to_v4i8_scalar(float inreg %a, i32 inreg %b)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s4
; GFX11-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v2, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f32_to_v4i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s1, s0, 24
+; GFX13-NEXT: s_lshr_b32 s2, s0, 16
+; GFX13-NEXT: s_lshr_b32 s3, s0, 8
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr1
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: s_lshr_b32 s2, s0, 16
+; GFX13-NEXT: s_lshr_b32 s1, s0, 24
+; GFX13-NEXT: s_lshr_b32 s3, s0, 8
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s3
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5081,6 +6199,97 @@ define float @bitcast_v4i8_to_f32(<4 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i8_to_f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v5.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i8_to_f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v5, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v5, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5258,6 +6467,51 @@ define inreg float @bitcast_v4i8_to_f32_scalar(<4 x i8> inreg %a, i32 inreg %b)
; GFX11-NEXT: v_or_b32_e32 v0, v1, v0
; GFX11-NEXT: .LBB43_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i8_to_f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB43_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: s_branch .LBB43_3
+; GFX13-NEXT: .LBB43_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0
+; GFX13-NEXT: .LBB43_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: .LBB43_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5347,6 +6601,24 @@ define <2 x half> @bitcast_v2i16_to_v2f16(<2 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v2f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5466,6 +6738,31 @@ define inreg <2 x half> @bitcast_v2i16_to_v2f16_scalar(<2 x i16> inreg %a, i32 i
; GFX11-NEXT: .LBB45_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v2f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB45_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5552,6 +6849,24 @@ define <2 x i16> @bitcast_v2f16_to_v2i16(<2 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v2i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5675,6 +6990,31 @@ define inreg <2 x i16> @bitcast_v2f16_to_v2i16_scalar(<2 x half> inreg %a, i32 i
; GFX11-NEXT: .LBB47_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v2i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5756,6 +7096,24 @@ define <2 x bfloat> @bitcast_v2i16_to_v2bf16(<2 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v2bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5873,6 +7231,31 @@ define inreg <2 x bfloat> @bitcast_v2i16_to_v2bf16_scalar(<2 x i16> inreg %a, i3
; GFX11-NEXT: .LBB49_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v2bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB49_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB49_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6051,6 +7434,24 @@ define <2 x i16> @bitcast_v2bf16_to_v2i16(<2 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v2i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6267,6 +7668,31 @@ define inreg <2 x i16> @bitcast_v2bf16_to_v2i16_scalar(<2 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: .LBB51_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v2i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6359,6 +7785,24 @@ define <1 x i32> @bitcast_v2i16_to_v1i32(<2 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v1i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6474,6 +7918,31 @@ define inreg <1 x i32> @bitcast_v2i16_to_v1i32_scalar(<2 x i16> inreg %a, i32 in
; GFX11-NEXT: .LBB53_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v1i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB53_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6552,6 +8021,24 @@ define <2 x i16> @bitcast_v1i32_to_v2i16(<1 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v2i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6659,6 +8146,31 @@ define inreg <2 x i16> @bitcast_v1i32_to_v2i16_scalar(<1 x i32> inreg %a, i32 in
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v2i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB55_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6842,6 +8354,71 @@ define <4 x i8> @bitcast_v2i16_to_v4i8(<2 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2i16_to_v4i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_branch .LBB56_3
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: .LBB56_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2i16_to_v4i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB56_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB56_4
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB56_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: .LBB56_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7006,6 +8583,43 @@ define inreg <4 x i8> @bitcast_v2i16_to_v4i8_scalar(<2 x i16> inreg %a, i32 inre
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s4
; GFX11-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v2, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i16_to_v4i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB57_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s2, s0, 24
+; GFX13-NEXT: s_lshr_b32 s1, s0, 16
+; GFX13-NEXT: s_lshr_b32 s4, s0, 8
+; GFX13-NEXT: s_branch .LBB57_3
+; GFX13-NEXT: .LBB57_2:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr1
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: .LBB57_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB57_5:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s4
+; GFX13-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v2, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7238,6 +8852,97 @@ define <2 x i16> @bitcast_v4i8_to_v2i16(<4 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i8_to_v2i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB58_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB58_4
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB58_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: .LBB58_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v5.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i8_to_v2i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v5, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB58_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB58_4
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB58_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: .LBB58_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v5, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7421,6 +9126,51 @@ define inreg <2 x i16> @bitcast_v4i8_to_v2i16_scalar(<4 x i8> inreg %a, i32 inre
; GFX11-NEXT: v_or_b32_e32 v0, v1, v0
; GFX11-NEXT: .LBB59_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i8_to_v2i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB59_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: s_branch .LBB59_3
+; GFX13-NEXT: .LBB59_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0
+; GFX13-NEXT: .LBB59_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: .LBB59_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7516,6 +9266,24 @@ define <2 x bfloat> @bitcast_v2f16_to_v2bf16(<2 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v2bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7644,6 +9412,31 @@ define inreg <2 x bfloat> @bitcast_v2f16_to_v2bf16_scalar(<2 x half> inreg %a, i
; GFX11-NEXT: .LBB61_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v2bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB61_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB61_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7822,6 +9615,24 @@ define <2 x half> @bitcast_v2bf16_to_v2f16(<2 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB62_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v2f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8043,6 +9854,31 @@ define inreg <2 x half> @bitcast_v2bf16_to_v2f16_scalar(<2 x bfloat> inreg %a, i
; GFX11-FAKE16-NEXT: .LBB63_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v2f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB63_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB63_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8135,6 +9971,24 @@ define <1 x i32> @bitcast_v2f16_to_v1i32(<2 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v1i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8257,6 +10111,31 @@ define inreg <1 x i32> @bitcast_v2f16_to_v1i32_scalar(<2 x half> inreg %a, i32 i
; GFX11-NEXT: .LBB65_4:
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v1i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB65_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB65_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8335,6 +10214,24 @@ define <2 x half> @bitcast_v1i32_to_v2f16(<1 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v2f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8442,6 +10339,31 @@ define inreg <2 x half> @bitcast_v1i32_to_v2f16_scalar(<1 x i32> inreg %a, i32 i
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v2f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB67_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB67_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8624,6 +10546,71 @@ define <4 x i8> @bitcast_v2f16_to_v4i8(<2 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2f16_to_v4i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_branch .LBB68_3
+; GFX13-TRUE16-NEXT: .LBB68_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: .LBB68_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2f16_to_v4i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB68_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB68_4
+; GFX13-FAKE16-NEXT: .LBB68_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB68_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB68_2
+; GFX13-FAKE16-NEXT: .LBB68_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8791,6 +10778,43 @@ define inreg <4 x i8> @bitcast_v2f16_to_v4i8_scalar(<2 x half> inreg %a, i32 inr
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s4
; GFX11-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v2, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f16_to_v4i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB69_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s2, s0, 24
+; GFX13-NEXT: s_lshr_b32 s1, s0, 16
+; GFX13-NEXT: s_lshr_b32 s4, s0, 8
+; GFX13-NEXT: s_branch .LBB69_3
+; GFX13-NEXT: .LBB69_2:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr1
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: .LBB69_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB69_5:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s4
+; GFX13-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v2, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9023,6 +11047,97 @@ define <2 x half> @bitcast_v4i8_to_v2f16(<4 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i8_to_v2f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-TRUE16-NEXT: .LBB70_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-TRUE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v5.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i8_to_v2f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v5, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-FAKE16-NEXT: .LBB70_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-FAKE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v5, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9206,6 +11321,51 @@ define inreg <2 x half> @bitcast_v4i8_to_v2f16_scalar(<4 x i8> inreg %a, i32 inr
; GFX11-NEXT: v_or_b32_e32 v0, v1, v0
; GFX11-NEXT: .LBB71_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i8_to_v2f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB71_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: s_branch .LBB71_3
+; GFX13-NEXT: .LBB71_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0
+; GFX13-NEXT: .LBB71_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: .LBB71_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9386,6 +11546,24 @@ define <1 x i32> @bitcast_v2bf16_to_v1i32(<2 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB72_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v1i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9604,6 +11782,31 @@ define inreg <1 x i32> @bitcast_v2bf16_to_v1i32_scalar(<2 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: .LBB73_4:
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v1i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB73_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB73_4:
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9687,6 +11890,24 @@ define <2 x bfloat> @bitcast_v1i32_to_v2bf16(<1 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v2bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v1
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9797,6 +12018,31 @@ define inreg <2 x bfloat> @bitcast_v1i32_to_v2bf16_scalar(<1 x i32> inreg %a, i3
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_mov_b32_e32 v0, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v2bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s1, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s1, -1
+; GFX13-NEXT: .LBB75_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s1, s1, exec_lo
+; GFX13-NEXT: s_cselect_b32 s1, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB75_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_mov_b32_e32 v0, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10048,6 +12294,71 @@ define <4 x i8> @bitcast_v2bf16_to_v4i8(<2 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v4
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2bf16_to_v4i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_branch .LBB76_3
+; GFX13-TRUE16-NEXT: .LBB76_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: .LBB76_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2bf16_to_v4i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB76_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB76_4
+; GFX13-FAKE16-NEXT: .LBB76_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB76_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB76_2
+; GFX13-FAKE16-NEXT: .LBB76_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10324,6 +12635,43 @@ define inreg <4 x i8> @bitcast_v2bf16_to_v4i8_scalar(<2 x bfloat> inreg %a, i32
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s4 :: v_dual_mov_b32 v1, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2bf16_to_v4i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB77_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s2, s0, 24
+; GFX13-NEXT: s_lshr_b32 s1, s0, 16
+; GFX13-NEXT: s_lshr_b32 s4, s0, 8
+; GFX13-NEXT: s_branch .LBB77_3
+; GFX13-NEXT: .LBB77_2:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr1
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: .LBB77_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB77_5:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s4
+; GFX13-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v2, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10553,6 +12901,97 @@ define <2 x bfloat> @bitcast_v4i8_to_v2bf16(<4 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i8_to_v2bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB78_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB78_4
+; GFX13-TRUE16-NEXT: .LBB78_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB78_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB78_2
+; GFX13-TRUE16-NEXT: .LBB78_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v5.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i8_to_v2bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v5, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB78_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB78_4
+; GFX13-FAKE16-NEXT: .LBB78_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB78_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB78_2
+; GFX13-FAKE16-NEXT: .LBB78_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v5, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10732,6 +13171,51 @@ define inreg <2 x bfloat> @bitcast_v4i8_to_v2bf16_scalar(<4 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v0, v1, v0
; GFX11-NEXT: .LBB79_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i8_to_v2bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB79_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: s_branch .LBB79_3
+; GFX13-NEXT: .LBB79_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0
+; GFX13-NEXT: .LBB79_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: .LBB79_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10900,6 +13384,71 @@ define <4 x i8> @bitcast_v1i32_to_v4i8(<1 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v1i32_to_v4i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB80_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_branch .LBB80_3
+; GFX13-TRUE16-NEXT: .LBB80_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: .LBB80_3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v1i32_to_v4i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB80_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB80_4
+; GFX13-FAKE16-NEXT: .LBB80_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB80_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v3, 24, v0 :: v_dual_lshrrev_b32 v2, 16, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB80_2
+; GFX13-FAKE16-NEXT: .LBB80_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v0 :: v_dual_lshrrev_b32 v3, 24, v0
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11050,6 +13599,44 @@ define inreg <4 x i8> @bitcast_v1i32_to_v4i8_scalar(<1 x i32> inreg %a, i32 inre
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s3
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v1i32_to_v4i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s1, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB81_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s1, s0, 24
+; GFX13-NEXT: s_lshr_b32 s2, s0, 16
+; GFX13-NEXT: s_lshr_b32 s3, s0, 8
+; GFX13-NEXT: s_branch .LBB81_3
+; GFX13-NEXT: .LBB81_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr1
+; GFX13-NEXT: .LBB81_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_lshr_b32 s2, s0, 16
+; GFX13-NEXT: s_lshr_b32 s1, s0, 24
+; GFX13-NEXT: s_lshr_b32 s3, s0, 8
+; GFX13-NEXT: .LBB81_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s3
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11282,6 +13869,97 @@ define <1 x i32> @bitcast_v4i8_to_v1i32(<4 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i8_to_v1i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB82_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB82_4
+; GFX13-TRUE16-NEXT: .LBB82_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB82_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB82_2
+; GFX13-TRUE16-NEXT: .LBB82_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v5.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i8_to_v1i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v5, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v4
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB82_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB82_4
+; GFX13-FAKE16-NEXT: .LBB82_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB82_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v5, v1, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB82_2
+; GFX13-FAKE16-NEXT: .LBB82_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v5, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11459,6 +14137,51 @@ define inreg <1 x i32> @bitcast_v4i8_to_v1i32_scalar(<4 x i8> inreg %a, i32 inre
; GFX11-NEXT: v_or_b32_e32 v0, v1, v0
; GFX11-NEXT: .LBB83_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i8_to_v1i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s16, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB83_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX13-NEXT: v_perm_b32 v0, s0, s1, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v0, v0, v1
+; GFX13-NEXT: s_branch .LBB83_3
+; GFX13-NEXT: .LBB83_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0
+; GFX13-NEXT: .LBB83_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v0, s2, s3, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: .LBB83_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.352bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.352bit.ll
index ec56217a96b6d..b7674c8c39223 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.352bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.352bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <11 x float> @bitcast_v11i32_to_v11f32(<11 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v11i32_to_v11f32:
@@ -103,6 +105,29 @@ define <11 x float> @bitcast_v11i32_to_v11f32(<11 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i32_to_v11f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -279,6 +304,46 @@ define inreg <11 x float> @bitcast_v11i32_to_v11f32_scalar(<11 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i32_to_v11f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -387,6 +452,29 @@ define <11 x i32> @bitcast_v11f32_to_v11i32(<11 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f32_to_v11i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -570,6 +658,46 @@ define inreg <11 x i32> @bitcast_v11f32_to_v11i32_scalar(<11 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f32_to_v11i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -753,6 +881,29 @@ define <22 x i16> @bitcast_v11i32_to_v22i16(<11 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i32_to_v22i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -995,6 +1146,46 @@ define inreg <22 x i16> @bitcast_v11i32_to_v22i16_scalar(<11 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i32_to_v22i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1251,6 +1442,35 @@ define <11 x i32> @bitcast_v22i16_to_v11i32(<22 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i16_to_v11i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1565,6 +1785,50 @@ define inreg <11 x i32> @bitcast_v22i16_to_v11i32_scalar(<22 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i16_to_v11i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1748,6 +2012,29 @@ define <22 x half> @bitcast_v11i32_to_v22f16(<11 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i32_to_v22f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v10, 3, v10 :: v_dual_add_nc_u32 v9, 3, v9
+; GFX13-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_add_nc_u32 v7, 3, v7
+; GFX13-NEXT: v_dual_add_nc_u32 v6, 3, v6 :: v_dual_add_nc_u32 v5, 3, v5
+; GFX13-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1990,6 +2277,46 @@ define inreg <22 x half> @bitcast_v11i32_to_v22f16_scalar(<11 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i32_to_v22f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2290,6 +2617,35 @@ define <11 x i32> @bitcast_v22f16_to_v11i32(<22 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f16_to_v11i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2641,6 +2997,50 @@ define inreg <11 x i32> @bitcast_v22f16_to_v11i32_scalar(<22 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f16_to_v11i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2818,6 +3218,29 @@ define <22 x i16> @bitcast_v11f32_to_v22i16(<11 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f32_to_v22i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3091,6 +3514,46 @@ define inreg <22 x i16> @bitcast_v11f32_to_v22i16_scalar(<11 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f32_to_v22i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3347,6 +3810,35 @@ define <11 x float> @bitcast_v22i16_to_v11f32(<22 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB14_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i16_to_v11f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB14_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3661,6 +4153,50 @@ define inreg <11 x float> @bitcast_v22i16_to_v11f32_scalar(<22 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i16_to_v11f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3838,6 +4374,29 @@ define <22 x half> @bitcast_v11f32_to_v22f16(<11 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f32_to_v22f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v10, 1.0, v10 :: v_dual_add_f32 v9, 1.0, v9
+; GFX13-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_add_f32 v7, 1.0, v7
+; GFX13-NEXT: v_dual_add_f32 v6, 1.0, v6 :: v_dual_add_f32 v5, 1.0, v5
+; GFX13-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4111,6 +4670,46 @@ define inreg <22 x half> @bitcast_v11f32_to_v22f16_scalar(<11 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f32_to_v22f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4411,6 +5010,35 @@ define <11 x float> @bitcast_v22f16_to_v11f32(<22 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f16_to_v11f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4762,6 +5390,50 @@ define inreg <11 x float> @bitcast_v22f16_to_v11f32_scalar(<22 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_mov_b32_e32 v10, s22
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f16_to_v11f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_mov_b32_e32 v10, s22
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5067,6 +5739,35 @@ define <22 x half> @bitcast_v22i16_to_v22f16(<22 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i16_to_v22f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5452,6 +6153,52 @@ define inreg <22 x half> @bitcast_v22i16_to_v22f16_scalar(<22 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i16_to_v22f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB21_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5716,6 +6463,35 @@ define <22 x i16> @bitcast_v22f16_to_v22i16(<22 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f16_to_v22i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v11
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6095,6 +6871,52 @@ define inreg <22 x i16> @bitcast_v22f16_to_v22i16_scalar(<22 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f16_to_v22i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s23, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.384bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.384bit.ll
index ab00b98ec0560..f8ebb8b23825d 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.384bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.384bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <12 x float> @bitcast_v12i32_to_v12f32(<12 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v12i32_to_v12f32:
@@ -107,6 +109,29 @@ define <12 x float> @bitcast_v12i32_to_v12f32(<12 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v12f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -290,6 +315,47 @@ define inreg <12 x float> @bitcast_v12i32_to_v12f32_scalar(<12 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v12f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -401,6 +467,29 @@ define <12 x i32> @bitcast_v12f32_to_v12i32(<12 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v12i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -591,6 +680,47 @@ define inreg <12 x i32> @bitcast_v12f32_to_v12i32_scalar(<12 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v12i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -709,6 +839,29 @@ define <6 x double> @bitcast_v12i32_to_v6f64(<12 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v6f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -892,6 +1045,47 @@ define inreg <6 x double> @bitcast_v12i32_to_v6f64_scalar(<12 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v6f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -986,6 +1180,30 @@ define <12 x i32> @bitcast_v6f64_to_v12i32(<6 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v12i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1152,6 +1370,45 @@ define inreg <12 x i32> @bitcast_v6f64_to_v12i32_scalar(<6 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v12i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1270,6 +1527,29 @@ define <6 x i64> @bitcast_v12i32_to_v6i64(<12 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v6i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1453,6 +1733,47 @@ define inreg <6 x i64> @bitcast_v12i32_to_v6i64_scalar(<12 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v6i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1574,6 +1895,39 @@ define <12 x i32> @bitcast_v6i64_to_v12i32(<6 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v12i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1757,6 +2111,41 @@ define inreg <12 x i32> @bitcast_v6i64_to_v12i32_scalar(<6 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v12i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB11_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1950,6 +2339,29 @@ define <24 x i16> @bitcast_v12i32_to_v24i16(<12 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB12_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v24i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2205,6 +2617,47 @@ define inreg <24 x i16> @bitcast_v12i32_to_v24i16_scalar(<12 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v24i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2477,6 +2930,36 @@ define <12 x i32> @bitcast_v24i16_to_v12i32(<24 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB14_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v12i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB14_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2810,6 +3293,51 @@ define inreg <12 x i32> @bitcast_v24i16_to_v12i32_scalar(<24 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v12i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3003,6 +3531,29 @@ define <24 x half> @bitcast_v12i32_to_v24f16(<12 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB16_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v24f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3258,6 +3809,47 @@ define inreg <24 x half> @bitcast_v12i32_to_v24f16_scalar(<12 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i32_to_v24f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3578,6 +4170,36 @@ define <12 x i32> @bitcast_v24f16_to_v12i32(<24 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v12i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3951,6 +4573,51 @@ define inreg <12 x i32> @bitcast_v24f16_to_v12i32_scalar(<24 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v12i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4062,6 +4729,29 @@ define <6 x double> @bitcast_v12f32_to_v6f64(<12 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v6f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4266,6 +4956,47 @@ define inreg <6 x double> @bitcast_v12f32_to_v6f64_scalar(<12 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v6f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4360,6 +5091,30 @@ define <12 x float> @bitcast_v6f64_to_v12f32(<6 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v12f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4526,6 +5281,45 @@ define inreg <12 x float> @bitcast_v6f64_to_v12f32_scalar(<6 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v12f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4637,6 +5431,29 @@ define <6 x i64> @bitcast_v12f32_to_v6i64(<12 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v6i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4841,6 +5658,47 @@ define inreg <6 x i64> @bitcast_v12f32_to_v6i64_scalar(<12 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v6i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4962,6 +5820,39 @@ define <12 x float> @bitcast_v6i64_to_v12f32(<6 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v12f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5145,6 +6036,41 @@ define inreg <12 x float> @bitcast_v6i64_to_v12f32_scalar(<6 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v12f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB27_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5331,6 +6257,29 @@ define <24 x i16> @bitcast_v12f32_to_v24i16(<12 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v24i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5616,6 +6565,47 @@ define inreg <24 x i16> @bitcast_v12f32_to_v24i16_scalar(<12 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v24i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5888,6 +6878,36 @@ define <12 x float> @bitcast_v24i16_to_v12f32(<24 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB30_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v12f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB30_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6221,6 +7241,51 @@ define inreg <12 x float> @bitcast_v24i16_to_v12f32_scalar(<24 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v12f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6407,6 +7472,29 @@ define <24 x half> @bitcast_v12f32_to_v24f16(<12 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v24f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6692,6 +7780,47 @@ define inreg <24 x half> @bitcast_v12f32_to_v24f16_scalar(<12 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f32_to_v24f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7012,6 +8141,36 @@ define <12 x float> @bitcast_v24f16_to_v12f32(<24 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB34_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v12f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB34_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7385,6 +8544,51 @@ define inreg <12 x float> @bitcast_v24f16_to_v12f32_scalar(<24 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v12f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7479,6 +8683,30 @@ define <6 x i64> @bitcast_v6f64_to_v6i64(<6 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v6i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7659,6 +8887,47 @@ define inreg <6 x i64> @bitcast_v6f64_to_v6i64_scalar(<6 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v6i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB37_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7780,6 +9049,39 @@ define <6 x double> @bitcast_v6i64_to_v6f64(<6 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v6f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7962,6 +9264,40 @@ define inreg <6 x double> @bitcast_v6i64_to_v6f64_scalar(<6 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v6f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: .LBB39_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8131,6 +9467,30 @@ define <24 x i16> @bitcast_v6f64_to_v24i16(<6 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB40_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v24i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB40_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8392,6 +9752,47 @@ define inreg <24 x i16> @bitcast_v6f64_to_v24i16_scalar(<6 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v24i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB41_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8664,6 +10065,36 @@ define <6 x double> @bitcast_v24i16_to_v6f64(<24 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB42_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v6f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB42_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9027,6 +10458,53 @@ define inreg <6 x double> @bitcast_v24i16_to_v6f64_scalar(<24 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v6f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9196,6 +10674,30 @@ define <24 x half> @bitcast_v6f64_to_v24f16(<6 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB44_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v24f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB44_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9457,6 +10959,47 @@ define inreg <24 x half> @bitcast_v6f64_to_v24f16_scalar(<6 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f64_to_v24f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB45_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9777,6 +11320,36 @@ define <6 x double> @bitcast_v24f16_to_v6f64(<24 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB46_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v6f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB46_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10189,6 +11762,53 @@ define inreg <6 x double> @bitcast_v24f16_to_v6f64_scalar(<24 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v6f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10385,6 +12005,39 @@ define <24 x i16> @bitcast_v6i64_to_v24i16(<6 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB48_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v24i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB48_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10640,6 +12293,41 @@ define inreg <24 x i16> @bitcast_v6i64_to_v24i16_scalar(<6 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v24i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB49_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB49_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10912,6 +12600,36 @@ define <6 x i64> @bitcast_v24i16_to_v6i64(<24 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB50_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v6i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB50_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11275,6 +12993,53 @@ define inreg <6 x i64> @bitcast_v24i16_to_v6i64_scalar(<24 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v6i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11471,6 +13236,39 @@ define <24 x half> @bitcast_v6i64_to_v24f16(<6 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB52_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v24f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB52_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11726,6 +13524,41 @@ define inreg <24 x half> @bitcast_v6i64_to_v24f16_scalar(<6 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i64_to_v24f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB53_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12046,6 +13879,36 @@ define <6 x i64> @bitcast_v24f16_to_v6i64(<24 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB54_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v6i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB54_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12458,6 +14321,53 @@ define inreg <6 x i64> @bitcast_v24f16_to_v6i64_scalar(<24 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v6i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12785,6 +14695,36 @@ define <24 x half> @bitcast_v24i16_to_v24f16(<24 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB56_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v24f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB56_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13195,6 +15135,53 @@ define inreg <24 x half> @bitcast_v24i16_to_v24f16_scalar(<24 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i16_to_v24f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB57_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13477,6 +15464,36 @@ define <24 x i16> @bitcast_v24f16_to_v24i16(<24 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB58_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v24i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB58_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13878,6 +15895,53 @@ define inreg <24 x i16> @bitcast_v24f16_to_v24i16_scalar(<24 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f16_to_v24i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.448bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.448bit.ll
index cb85f607aca61..fea8d3a7dd0cc 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.448bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.448bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <14 x float> @bitcast_v14i32_to_v14f32(<14 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v14i32_to_v14f32:
@@ -115,6 +117,31 @@ define <14 x float> @bitcast_v14i32_to_v14f32(<14 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v14f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -316,6 +343,50 @@ define inreg <14 x float> @bitcast_v14i32_to_v14f32_scalar(<14 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v14f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -435,6 +506,31 @@ define <14 x i32> @bitcast_v14f32_to_v14i32(<14 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v14i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -650,6 +746,50 @@ define inreg <14 x i32> @bitcast_v14f32_to_v14i32_scalar(<14 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v14i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -776,6 +916,31 @@ define <7 x i64> @bitcast_v14i32_to_v7i64(<14 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v7i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -977,6 +1142,50 @@ define inreg <7 x i64> @bitcast_v14i32_to_v7i64_scalar(<14 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v7i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1107,6 +1316,42 @@ define <14 x i32> @bitcast_v7i64_to_v14i32(<7 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v14i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1308,6 +1553,43 @@ define inreg <14 x i32> @bitcast_v7i64_to_v14i32_scalar(<7 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v14i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1434,6 +1716,31 @@ define <7 x double> @bitcast_v14i32_to_v7f64(<14 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v7f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1635,6 +1942,50 @@ define inreg <7 x double> @bitcast_v14i32_to_v7f64_scalar(<14 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v7f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1733,6 +2084,31 @@ define <14 x i32> @bitcast_v7f64_to_v14i32(<7 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v14i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1920,6 +2296,48 @@ define inreg <14 x i32> @bitcast_v7f64_to_v14i32_scalar(<7 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v14i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2133,6 +2551,31 @@ define <28 x i16> @bitcast_v14i32_to_v28i16(<14 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB12_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v28i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB12_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2418,6 +2861,50 @@ define inreg <28 x i16> @bitcast_v14i32_to_v28i16_scalar(<14 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v28i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2722,6 +3209,38 @@ define <14 x i32> @bitcast_v28i16_to_v14i32(<28 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB14_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v14i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB14_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3124,6 +3643,55 @@ define inreg <14 x i32> @bitcast_v28i16_to_v14i32_scalar(<28 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v14i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3337,6 +3905,31 @@ define <28 x half> @bitcast_v14i32_to_v28f16(<14 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB16_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v28f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB16_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3622,6 +4215,50 @@ define inreg <28 x half> @bitcast_v14i32_to_v28f16_scalar(<14 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i32_to_v28f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3982,6 +4619,38 @@ define <14 x i32> @bitcast_v28f16_to_v14i32(<28 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB18_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v14i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB18_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4435,6 +5104,55 @@ define inreg <14 x i32> @bitcast_v28f16_to_v14i32_scalar(<28 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v14i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4554,6 +5272,31 @@ define <7 x i64> @bitcast_v14f32_to_v7i64(<14 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v7i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4769,6 +5512,50 @@ define inreg <7 x i64> @bitcast_v14f32_to_v7i64_scalar(<14 x float> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v7i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4899,6 +5686,42 @@ define <14 x float> @bitcast_v7i64_to_v14f32(<7 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v14f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5100,6 +5923,43 @@ define inreg <14 x float> @bitcast_v7i64_to_v14f32_scalar(<7 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v14f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5219,6 +6079,31 @@ define <7 x double> @bitcast_v14f32_to_v7f64(<14 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v7f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5434,6 +6319,50 @@ define inreg <7 x double> @bitcast_v14f32_to_v7f64_scalar(<14 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v7f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5532,6 +6461,31 @@ define <14 x float> @bitcast_v7f64_to_v14f32(<7 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v14f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5719,6 +6673,48 @@ define inreg <14 x float> @bitcast_v7f64_to_v14f32_scalar(<7 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v14f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5925,6 +6921,31 @@ define <28 x i16> @bitcast_v14f32_to_v28i16(<14 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB28_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v28i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB28_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6237,6 +7258,50 @@ define inreg <28 x i16> @bitcast_v14f32_to_v28i16_scalar(<14 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v28i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6541,6 +7606,38 @@ define <14 x float> @bitcast_v28i16_to_v14f32(<28 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB30_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v14f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB30_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6943,6 +8040,55 @@ define inreg <14 x float> @bitcast_v28i16_to_v14f32_scalar(<28 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v14f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7149,6 +8295,31 @@ define <28 x half> @bitcast_v14f32_to_v28f16(<14 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB32_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v28f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB32_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7461,6 +8632,50 @@ define inreg <28 x half> @bitcast_v14f32_to_v28f16_scalar(<14 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f32_to_v28f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7821,6 +9036,38 @@ define <14 x float> @bitcast_v28f16_to_v14f32(<28 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB34_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v14f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB34_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8274,6 +9521,55 @@ define inreg <14 x float> @bitcast_v28f16_to_v14f32_scalar(<28 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v14f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8404,6 +9700,42 @@ define <7 x double> @bitcast_v7i64_to_v7f64(<7 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v7f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8604,6 +9936,42 @@ define inreg <7 x double> @bitcast_v7i64_to_v7f64_scalar(<7 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v7f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8702,6 +10070,31 @@ define <7 x i64> @bitcast_v7f64_to_v7i64(<7 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v7i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8889,6 +10282,48 @@ define inreg <7 x i64> @bitcast_v7f64_to_v7i64_scalar(<7 x double> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v7i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9106,6 +10541,42 @@ define <28 x i16> @bitcast_v7i64_to_v28i16(<7 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB40_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v28i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB40_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9391,6 +10862,43 @@ define inreg <28 x i16> @bitcast_v7i64_to_v28i16_scalar(<7 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v28i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB41_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9695,6 +11203,38 @@ define <7 x i64> @bitcast_v28i16_to_v7i64(<28 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB42_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v7i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB42_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10097,6 +11637,55 @@ define inreg <7 x i64> @bitcast_v28i16_to_v7i64_scalar(<28 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v7i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10314,6 +11903,42 @@ define <28 x half> @bitcast_v7i64_to_v28f16(<7 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB44_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v28f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB44_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10599,6 +12224,43 @@ define inreg <28 x half> @bitcast_v7i64_to_v28f16_scalar(<7 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7i64_to_v28f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB45_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10959,6 +12621,38 @@ define <7 x i64> @bitcast_v28f16_to_v7i64(<28 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB46_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v7i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB46_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11412,6 +13106,55 @@ define inreg <7 x i64> @bitcast_v28f16_to_v7i64_scalar(<28 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v7i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11597,6 +13340,31 @@ define <28 x i16> @bitcast_v7f64_to_v28i16(<7 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB48_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v28i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB48_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11881,6 +13649,48 @@ define inreg <28 x i16> @bitcast_v7f64_to_v28i16_scalar(<7 x double> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v28i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB49_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB49_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12185,6 +13995,38 @@ define <7 x double> @bitcast_v28i16_to_v7f64(<28 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB50_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v7f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB50_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12587,6 +14429,55 @@ define inreg <7 x double> @bitcast_v28i16_to_v7f64_scalar(<28 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v7f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12772,6 +14663,31 @@ define <28 x half> @bitcast_v7f64_to_v28f16(<7 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB52_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v28f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB52_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13056,6 +14972,48 @@ define inreg <28 x half> @bitcast_v7f64_to_v28f16_scalar(<7 x double> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v7f64_to_v28f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[14:15], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[12:13], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB53_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13416,6 +15374,38 @@ define <7 x double> @bitcast_v28f16_to_v7f64(<28 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB54_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v7f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB54_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13869,6 +15859,55 @@ define inreg <7 x double> @bitcast_v28f16_to_v7f64_scalar(<28 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v7f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14259,6 +16298,38 @@ define <28 x half> @bitcast_v28i16_to_v28f16(<28 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB56_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v28f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: .LBB56_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14720,6 +16791,55 @@ define inreg <28 x half> @bitcast_v28i16_to_v28f16_scalar(<28 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i16_to_v28f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB57_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15037,6 +17157,38 @@ define <28 x i16> @bitcast_v28f16_to_v28i16(<28 x half> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB58_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v28i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v14
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: .LBB58_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15484,6 +17636,55 @@ define inreg <28 x i16> @bitcast_v28f16_to_v28i16_scalar(<28 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f16_to_v28i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s15, s3
+; GFX13-NEXT: s_mov_b32 s14, s2
+; GFX13-NEXT: s_mov_b32 s13, s1
+; GFX13-NEXT: s_mov_b32 s12, s0
+; GFX13-NEXT: s_cmp_lg_u32 s26, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s12 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s14 :: v_dual_mov_b32 v3, s15
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.48bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.48bit.ll
index ffff9da12fe9f..1315d20445976 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.48bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.48bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13 %s
define <3 x half> @bitcast_v3bf16_to_v3f16(<3 x bfloat> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v3bf16_to_v3f16:
@@ -222,6 +224,25 @@ define <3 x half> @bitcast_v3bf16_to_v3f16(<3 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB0_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3bf16_to_v3f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -502,6 +523,32 @@ define inreg <3 x half> @bitcast_v3bf16_to_v3f16_scalar(<3 x bfloat> inreg %a, i
; GFX11-FAKE16-NEXT: .LBB1_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3bf16_to_v3f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB1_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -610,6 +657,25 @@ define <3 x bfloat> @bitcast_v3f16_to_v3bf16(<3 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f16_to_v3bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -753,6 +819,32 @@ define inreg <3 x bfloat> @bitcast_v3f16_to_v3bf16_scalar(<3 x half> inreg %a, i
; GFX11-NEXT: .LBB3_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f16_to_v3bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB3_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -983,6 +1075,25 @@ define <3 x i16> @bitcast_v3bf16_to_v3i16(<3 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB4_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3bf16_to_v3i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1254,6 +1365,32 @@ define inreg <3 x i16> @bitcast_v3bf16_to_v3i16_scalar(<3 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: .LBB5_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3bf16_to_v3i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB5_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1330,7 +1467,7 @@ define <3 x bfloat> @bitcast_v3i16_to_v3bf16(<3 x i16> %a, i32 %b) #0 {
; GFX9-NEXT: s_xor_b64 s[4:5], exec, s[4:5]
; GFX9-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]
; GFX9-NEXT: ; %bb.1: ; %cmp.true
-; GFX9-NEXT: v_pk_add_u16 v1, v1, 3
+; GFX9-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
; GFX9-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
; GFX9-NEXT: ; %bb.2: ; %end
; GFX9-NEXT: s_or_b64 exec, exec, s[4:5]
@@ -1345,11 +1482,30 @@ define <3 x bfloat> @bitcast_v3i16_to_v3bf16(<3 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: s_and_not1_saveexec_b32 s0, s0
; GFX11-NEXT: ; %bb.1: ; %cmp.true
-; GFX11-NEXT: v_pk_add_u16 v1, v1, 3
+; GFX11-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
; GFX11-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i16_to_v3bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1452,7 +1608,7 @@ define inreg <3 x bfloat> @bitcast_v3i16_to_v3bf16_scalar(<3 x i16> inreg %a, i3
; GFX9-NEXT: s_cmp_lg_u32 s4, 1
; GFX9-NEXT: s_cbranch_scc1 .LBB7_5
; GFX9-NEXT: ; %bb.4: ; %cmp.true
-; GFX9-NEXT: v_pk_add_u16 v1, s17, 3
+; GFX9-NEXT: v_pk_add_u16 v1, s17, 3 op_sel_hi:[1,0]
; GFX9-NEXT: v_pk_add_u16 v0, s16, 3 op_sel_hi:[1,0]
; GFX9-NEXT: s_setpc_b64 s[30:31]
; GFX9-NEXT: .LBB7_5:
@@ -1475,12 +1631,38 @@ define inreg <3 x bfloat> @bitcast_v3i16_to_v3bf16_scalar(<3 x i16> inreg %a, i3
; GFX11-NEXT: s_cmp_lg_u32 s2, 1
; GFX11-NEXT: s_cbranch_scc1 .LBB7_4
; GFX11-NEXT: ; %bb.3: ; %cmp.true
-; GFX11-NEXT: v_pk_add_u16 v1, s1, 3
+; GFX11-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
; GFX11-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
; GFX11-NEXT: s_setpc_b64 s[30:31]
; GFX11-NEXT: .LBB7_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i16_to_v3bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB7_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1575,6 +1757,25 @@ define <3 x i16> @bitcast_v3f16_to_v3i16(<3 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f16_to_v3i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1709,6 +1910,32 @@ define inreg <3 x i16> @bitcast_v3f16_to_v3i16_scalar(<3 x half> inreg %a, i32 i
; GFX11-NEXT: .LBB9_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f16_to_v3i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB9_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1789,7 +2016,7 @@ define <3 x half> @bitcast_v3i16_to_v3f16(<3 x i16> %a, i32 %b) #0 {
; GFX9-NEXT: s_xor_b64 s[4:5], exec, s[4:5]
; GFX9-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]
; GFX9-NEXT: ; %bb.1: ; %cmp.true
-; GFX9-NEXT: v_pk_add_u16 v1, v1, 3
+; GFX9-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
; GFX9-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
; GFX9-NEXT: ; %bb.2: ; %end
; GFX9-NEXT: s_or_b64 exec, exec, s[4:5]
@@ -1804,11 +2031,30 @@ define <3 x half> @bitcast_v3i16_to_v3f16(<3 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: s_and_not1_saveexec_b32 s0, s0
; GFX11-NEXT: ; %bb.1: ; %cmp.true
-; GFX11-NEXT: v_pk_add_u16 v1, v1, 3
+; GFX11-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
; GFX11-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i16_to_v3f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1912,7 +2158,7 @@ define inreg <3 x half> @bitcast_v3i16_to_v3f16_scalar(<3 x i16> inreg %a, i32 i
; GFX9-NEXT: s_cmp_lg_u32 s4, 1
; GFX9-NEXT: s_cbranch_scc1 .LBB11_5
; GFX9-NEXT: ; %bb.4: ; %cmp.true
-; GFX9-NEXT: v_pk_add_u16 v1, s17, 3
+; GFX9-NEXT: v_pk_add_u16 v1, s17, 3 op_sel_hi:[1,0]
; GFX9-NEXT: v_pk_add_u16 v0, s16, 3 op_sel_hi:[1,0]
; GFX9-NEXT: s_setpc_b64 s[30:31]
; GFX9-NEXT: .LBB11_5:
@@ -1935,12 +2181,38 @@ define inreg <3 x half> @bitcast_v3i16_to_v3f16_scalar(<3 x i16> inreg %a, i32 i
; GFX11-NEXT: s_cmp_lg_u32 s2, 1
; GFX11-NEXT: s_cbranch_scc1 .LBB11_4
; GFX11-NEXT: ; %bb.3: ; %cmp.true
-; GFX11-NEXT: v_pk_add_u16 v1, s1, 3
+; GFX11-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
; GFX11-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
; GFX11-NEXT: s_setpc_b64 s[30:31]
; GFX11-NEXT: .LBB11_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i16_to_v3f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.576bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.576bit.ll
index 9b079dccf1023..eec04d51dc59b 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.576bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.576bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <18 x float> @bitcast_v18i32_to_v18f32(<18 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v18i32_to_v18f32:
@@ -131,6 +133,33 @@ define <18 x float> @bitcast_v18i32_to_v18f32(<18 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v18f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -375,6 +404,57 @@ define inreg <18 x float> @bitcast_v18i32_to_v18f32_scalar(<18 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v18f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -508,6 +588,33 @@ define <18 x i32> @bitcast_v18f32_to_v18i32(<18 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v18i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -977,6 +1084,57 @@ define inreg <18 x i32> @bitcast_v18f32_to_v18i32_scalar(<18 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v18i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1119,6 +1277,33 @@ define <9 x i64> @bitcast_v18i32_to_v9i64(<18 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v9i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1363,6 +1548,57 @@ define inreg <9 x i64> @bitcast_v18i32_to_v9i64_scalar(<18 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v9i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1510,6 +1746,47 @@ define <18 x i32> @bitcast_v9i64_to_v18i32(<9 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v18i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1754,6 +2031,48 @@ define inreg <18 x i32> @bitcast_v9i64_to_v18i32_scalar(<9 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v18i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1896,6 +2215,33 @@ define <9 x double> @bitcast_v18i32_to_v9f64(<18 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v9f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2140,6 +2486,57 @@ define inreg <9 x double> @bitcast_v18i32_to_v9f64_scalar(<18 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v9f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2246,6 +2643,33 @@ define <18 x i32> @bitcast_v9f64_to_v18i32(<9 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f64_to_v18i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2679,6 +3103,101 @@ define inreg <18 x i32> @bitcast_v9f64_to_v18i32_scalar(<9 x double> inreg %a, i
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f64_to_v18i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3285,6 +3804,176 @@ define <36 x i16> @bitcast_v18i32_to_v36i16(<18 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v18i32_to_v36i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v18i32_to_v36i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3891,6 +4580,131 @@ define inreg <36 x i16> @bitcast_v18i32_to_v36i16_scalar(<18 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
; GFX11-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v36i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s18, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s19, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s20, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s21, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s22, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s23, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s24, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s25, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s26, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s27, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s28, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s29, s4
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s15 :: v_dual_mov_b32 v7, s14
+; GFX13-NEXT: v_dual_mov_b32 v8, s13 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s10
+; GFX13-NEXT: v_dual_mov_b32 v12, s9 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4710,6 +5524,176 @@ define <18 x i32> @bitcast_v36i16_to_v18i32(<36 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36i16_to_v18i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36i16_to_v18i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5445,6 +6429,100 @@ define inreg <18 x i32> @bitcast_v36i16_to_v18i32_scalar(<36 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36i16_to_v18i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6051,6 +7129,176 @@ define <36 x half> @bitcast_v18i32_to_v36f16(<18 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v18i32_to_v36f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v18i32_to_v36f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6657,6 +7905,131 @@ define inreg <36 x half> @bitcast_v18i32_to_v36f16_scalar(<18 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
; GFX11-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18i32_to_v36f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s18, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s19, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s20, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s21, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s22, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s23, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s24, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s25, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s26, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s27, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s28, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s29, s4
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s15 :: v_dual_mov_b32 v7, s14
+; GFX13-NEXT: v_dual_mov_b32 v8, s13 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s10
+; GFX13-NEXT: v_dual_mov_b32 v12, s9 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7550,6 +8923,176 @@ define <18 x i32> @bitcast_v36f16_to_v18i32(<36 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36f16_to_v18i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36f16_to_v18i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8355,6 +9898,100 @@ define inreg <18 x i32> @bitcast_v36f16_to_v18i32_scalar(<36 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36f16_to_v18i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8488,6 +10125,33 @@ define <9 x i64> @bitcast_v18f32_to_v9i64(<18 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v9i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8957,6 +10621,57 @@ define inreg <9 x i64> @bitcast_v18f32_to_v9i64_scalar(<18 x float> inreg %a, i3
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v9i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9104,6 +10819,47 @@ define <18 x float> @bitcast_v9i64_to_v18f32(<9 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v18f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9348,6 +11104,48 @@ define inreg <18 x float> @bitcast_v9i64_to_v18f32_scalar(<9 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v18f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9481,6 +11279,33 @@ define <9 x double> @bitcast_v18f32_to_v9f64(<18 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v9f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9950,6 +11775,57 @@ define inreg <9 x double> @bitcast_v18f32_to_v9f64_scalar(<18 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v9f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10056,6 +11932,33 @@ define <18 x float> @bitcast_v9f64_to_v18f32(<9 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f64_to_v18f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10489,6 +12392,101 @@ define inreg <18 x float> @bitcast_v9f64_to_v18f32_scalar(<9 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f64_to_v18f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11077,6 +13075,176 @@ define <36 x i16> @bitcast_v18f32_to_v36i16(<18 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v18f32_to_v36i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v18f32_to_v36i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11903,6 +14071,131 @@ define inreg <36 x i16> @bitcast_v18f32_to_v36i16_scalar(<18 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v23
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v24
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v36i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s18, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s19, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s20, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s21, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s22, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s23, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s24, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s25, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s26, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s27, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s28, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s29, s4
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s15 :: v_dual_mov_b32 v7, s14
+; GFX13-NEXT: v_dual_mov_b32 v8, s13 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s10
+; GFX13-NEXT: v_dual_mov_b32 v12, s9 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12722,6 +15015,176 @@ define <18 x float> @bitcast_v36i16_to_v18f32(<36 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36i16_to_v18f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36i16_to_v18f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13457,6 +15920,100 @@ define inreg <18 x float> @bitcast_v36i16_to_v18f32_scalar(<36 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36i16_to_v18f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14045,6 +16602,176 @@ define <36 x half> @bitcast_v18f32_to_v36f16(<18 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v18f32_to_v36f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v18f32_to_v36f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14871,6 +17598,131 @@ define inreg <36 x half> @bitcast_v18f32_to_v36f16_scalar(<18 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v23
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v24
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v18f32_to_v36f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s18, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s19, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s20, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s21, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s22, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s23, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s24, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s25, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s26, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s27, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s28, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s29, s4
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s15 :: v_dual_mov_b32 v7, s14
+; GFX13-NEXT: v_dual_mov_b32 v8, s13 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s10
+; GFX13-NEXT: v_dual_mov_b32 v12, s9 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15764,6 +18616,176 @@ define <18 x float> @bitcast_v36f16_to_v18f32(<36 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36f16_to_v18f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36f16_to_v18f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16569,6 +19591,100 @@ define inreg <18 x float> @bitcast_v36f16_to_v18f32_scalar(<36 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36f16_to_v18f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16716,6 +19832,47 @@ define <9 x double> @bitcast_v9i64_to_v9f64(<9 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v9f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16959,6 +20116,47 @@ define inreg <9 x double> @bitcast_v9i64_to_v9f64_scalar(<9 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v9f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17065,6 +20263,33 @@ define <9 x i64> @bitcast_v9f64_to_v9i64(<9 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f64_to_v9i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17498,6 +20723,101 @@ define inreg <9 x i64> @bitcast_v9f64_to_v9i64_scalar(<9 x double> inreg %a, i32
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9f64_to_v9i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18114,6 +21434,204 @@ define <36 x i16> @bitcast_v9i64_to_v36i16(<9 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v9i64_to_v36i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v9i64_to_v36i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18720,6 +22238,122 @@ define inreg <36 x i16> @bitcast_v9i64_to_v36i16_scalar(<9 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
; GFX11-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v36i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s18, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s19, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s20, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s21, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s22, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s23, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s24, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s25, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s26, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s27, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s28, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s29, s4
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s15 :: v_dual_mov_b32 v7, s14
+; GFX13-NEXT: v_dual_mov_b32 v8, s13 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s10
+; GFX13-NEXT: v_dual_mov_b32 v12, s9 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19539,6 +23173,176 @@ define <9 x i64> @bitcast_v36i16_to_v9i64(<36 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36i16_to_v9i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36i16_to_v9i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20274,6 +24078,100 @@ define inreg <9 x i64> @bitcast_v36i16_to_v9i64_scalar(<36 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36i16_to_v9i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20890,6 +24788,204 @@ define <36 x half> @bitcast_v9i64_to_v36f16(<9 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v9i64_to_v36f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v9i64_to_v36f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21496,6 +25592,122 @@ define inreg <36 x half> @bitcast_v9i64_to_v36f16_scalar(<9 x i64> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
; GFX11-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v9i64_to_v36f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s46, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s46, -1
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-NEXT: s_lshr_b32 s5, s28, 16
+; GFX13-NEXT: s_lshr_b32 s6, s27, 16
+; GFX13-NEXT: s_lshr_b32 s7, s26, 16
+; GFX13-NEXT: s_lshr_b32 s8, s25, 16
+; GFX13-NEXT: s_lshr_b32 s9, s24, 16
+; GFX13-NEXT: s_lshr_b32 s10, s23, 16
+; GFX13-NEXT: s_lshr_b32 s11, s22, 16
+; GFX13-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-NEXT: s_lshr_b32 s13, s20, 16
+; GFX13-NEXT: s_lshr_b32 s14, s19, 16
+; GFX13-NEXT: s_lshr_b32 s15, s18, 16
+; GFX13-NEXT: s_lshr_b32 s40, s17, 16
+; GFX13-NEXT: s_lshr_b32 s41, s16, 16
+; GFX13-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-NEXT: s_lshr_b32 s43, s2, 16
+; GFX13-NEXT: s_lshr_b32 s44, s1, 16
+; GFX13-NEXT: s_lshr_b32 s45, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s18, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s19, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s20, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s21, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s22, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s23, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s24, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s25, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s26, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s27, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s28, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s29, s4
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s15 :: v_dual_mov_b32 v7, s14
+; GFX13-NEXT: v_dual_mov_b32 v8, s13 :: v_dual_mov_b32 v9, s12
+; GFX13-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v11, s10
+; GFX13-NEXT: v_dual_mov_b32 v12, s9 :: v_dual_mov_b32 v13, s8
+; GFX13-NEXT: v_dual_mov_b32 v14, s7 :: v_dual_mov_b32 v15, s6
+; GFX13-NEXT: v_dual_mov_b32 v16, s5 :: v_dual_mov_b32 v17, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22389,6 +26601,176 @@ define <9 x i64> @bitcast_v36f16_to_v9i64(<36 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36f16_to_v9i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36f16_to_v9i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23194,6 +27576,100 @@ define inreg <9 x i64> @bitcast_v36f16_to_v9i64_scalar(<36 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36f16_to_v9i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23755,6 +28231,176 @@ define <36 x i16> @bitcast_v9f64_to_v36i16(<9 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v9f64_to_v36i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v9f64_to_v36i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24536,6 +29182,259 @@ define inreg <36 x i16> @bitcast_v9f64_to_v36i16_scalar(<9 x double> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v18
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v17, v23, 16, v19
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v9f64_to_v36i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s6, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s6, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr5
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr4
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v17 :: v_dual_lshrrev_b32 v18, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v15 :: v_dual_lshrrev_b32 v19, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v13 :: v_dual_lshrrev_b32 v21, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v11 :: v_dual_lshrrev_b32 v23, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v25, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v7 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v5 :: v_dual_lshrrev_b32 v29, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v3 :: v_dual_lshrrev_b32 v31, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v33, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s46 :: v_dual_mov_b32 v31, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s44 :: v_dual_mov_b32 v27, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s42 :: v_dual_mov_b32 v23, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s40 :: v_dual_mov_b32 v19, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v35, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s12 :: v_dual_mov_b32 v32, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s10 :: v_dual_mov_b32 v28, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v24, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v20, s4
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v9f64_to_v36i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s6, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s6, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr4
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[13:14], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[8:9], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[3:4], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v14 :: v_dual_lshrrev_b32 v21, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v16 :: v_dual_lshrrev_b32 v22, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v18 :: v_dual_lshrrev_b32 v12, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v26, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v27, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v7, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v20 :: v_dual_lshrrev_b32 v2, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v34, 16, v0
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v19, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v3, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s20 :: v_dual_mov_b32 v8, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s24 :: v_dual_mov_b32 v15, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s28 :: v_dual_mov_b32 v1, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s3 :: v_dual_mov_b32 v6, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s19 :: v_dual_mov_b32 v11, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s23 :: v_dual_mov_b32 v18, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, s27 :: v_dual_mov_b32 v14, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s46 :: v_dual_mov_b32 v2, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s44 :: v_dual_mov_b32 v7, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v27, s42 :: v_dual_mov_b32 v26, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v12, s40 :: v_dual_mov_b32 v22, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s14 :: v_dual_mov_b32 v35, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, s12 :: v_dual_mov_b32 v32, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, s10 :: v_dual_mov_b32 v29, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s8 :: v_dual_mov_b32 v25, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v34, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v33, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v30, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v32, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v27, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v26, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v12, 16, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v35, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v31, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v29, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v28, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v25, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v22, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v24, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v23, 16, v19
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25355,6 +30254,176 @@ define <9 x double> @bitcast_v36i16_to_v9f64(<36 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36i16_to_v9f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36i16_to_v9f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26090,6 +31159,100 @@ define inreg <9 x double> @bitcast_v36i16_to_v9f64_scalar(<36 x i16> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36i16_to_v9f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26651,6 +31814,176 @@ define <36 x half> @bitcast_v9f64_to_v36f16(<9 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v9f64_to_v36f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr18_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v9f64_to_v36f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v18
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr19
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr18
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v18, 16, v17 :: v_dual_lshrrev_b32 v19, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v15 :: v_dual_lshrrev_b32 v21, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v13 :: v_dual_lshrrev_b32 v23, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v11 :: v_dual_lshrrev_b32 v25, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v35, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v26, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v25, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v24, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v23, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v22, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v21, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v20, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v19, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v18, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27432,6 +32765,259 @@ define inreg <36 x half> @bitcast_v9f64_to_v36f16_scalar(<9 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v18
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v17, v23, 16, v19
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v9f64_to_v36f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s6, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s6, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr5
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr4
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v17 :: v_dual_lshrrev_b32 v18, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v15 :: v_dual_lshrrev_b32 v19, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v13 :: v_dual_lshrrev_b32 v21, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v11 :: v_dual_lshrrev_b32 v23, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v25, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v7 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v5 :: v_dual_lshrrev_b32 v29, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v3 :: v_dual_lshrrev_b32 v31, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v33, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s46 :: v_dual_mov_b32 v31, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s44 :: v_dual_mov_b32 v27, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s42 :: v_dual_mov_b32 v23, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s40 :: v_dual_mov_b32 v19, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v35, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s12 :: v_dual_mov_b32 v32, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s10 :: v_dual_mov_b32 v28, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s8 :: v_dual_mov_b32 v24, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v20, s4
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v18.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v9f64_to_v36f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s6, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s4, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s6, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr4
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[13:14], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[8:9], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[3:4], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v14 :: v_dual_lshrrev_b32 v21, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v16 :: v_dual_lshrrev_b32 v22, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v18 :: v_dual_lshrrev_b32 v12, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v26, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v27, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v7, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v20 :: v_dual_lshrrev_b32 v2, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v34, 16, v0
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v19, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v3, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s20 :: v_dual_mov_b32 v8, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s24 :: v_dual_mov_b32 v15, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s28 :: v_dual_mov_b32 v1, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s3 :: v_dual_mov_b32 v6, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s19 :: v_dual_mov_b32 v11, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s23 :: v_dual_mov_b32 v18, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, s27 :: v_dual_mov_b32 v14, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s46 :: v_dual_mov_b32 v2, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s44 :: v_dual_mov_b32 v7, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v27, s42 :: v_dual_mov_b32 v26, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v12, s40 :: v_dual_mov_b32 v22, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s14 :: v_dual_mov_b32 v35, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, s12 :: v_dual_mov_b32 v32, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, s10 :: v_dual_mov_b32 v29, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s8 :: v_dual_mov_b32 v25, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v34, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v33, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v30, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v32, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v27, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v26, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v12, 16, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v35, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v31, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v29, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v28, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v25, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v22, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v24, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v21, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v23, 16, v19
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28325,6 +33911,176 @@ define <9 x double> @bitcast_v36f16_to_v9f64(<36 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36f16_to_v9f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v3 :: v_dual_lshrrev_b32 v34, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr19_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36f16_to_v9f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v17 :: v_dual_lshrrev_b32 v20, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v15 :: v_dual_lshrrev_b32 v22, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v13 :: v_dual_lshrrev_b32 v24, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v11 :: v_dual_lshrrev_b32 v26, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v9 :: v_dual_lshrrev_b32 v28, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v7 :: v_dual_lshrrev_b32 v30, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v5 :: v_dual_lshrrev_b32 v32, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v32, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v33, v0, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v34, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v35, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v31, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v30, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v29, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v28, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v27, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v26, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v25, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v24, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v23, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v22, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v21, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v20, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v19, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29130,6 +34886,100 @@ define inreg <9 x double> @bitcast_v36f16_to_v9f64_scalar(<36 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v36f16_to_v9f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v0
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s44, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29956,6 +35806,190 @@ define <36 x half> @bitcast_v36i16_to_v36f16(<36 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v36, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36i16_to_v36f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v7 :: v_dual_lshrrev_b32 v25, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v5 :: v_dual_lshrrev_b32 v19, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v3 :: v_dual_lshrrev_b32 v21, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v1 :: v_dual_lshrrev_b32 v23, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v0 :: v_dual_lshrrev_b32 v22, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v2 :: v_dual_lshrrev_b32 v20, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v4 :: v_dual_lshrrev_b32 v24, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v6 :: v_dual_lshrrev_b32 v26, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v8 :: v_dual_lshrrev_b32 v28, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v10 :: v_dual_lshrrev_b32 v30, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v12 :: v_dual_lshrrev_b32 v32, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v14 :: v_dual_lshrrev_b32 v34, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v16 :: v_dual_lshrrev_b32 v36, 16, v17
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v36.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36i16_to_v36f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v7 :: v_dual_lshrrev_b32 v25, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v5 :: v_dual_lshrrev_b32 v23, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v3 :: v_dual_lshrrev_b32 v21, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v1 :: v_dual_lshrrev_b32 v19, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v36, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v34, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v32, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v30, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v26, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v25, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v24, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v21, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v22, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v23, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v0 :: v_dual_lshrrev_b32 v20, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v2 :: v_dual_lshrrev_b32 v22, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v4 :: v_dual_lshrrev_b32 v24, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v6 :: v_dual_lshrrev_b32 v26, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v8 :: v_dual_lshrrev_b32 v28, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v10 :: v_dual_lshrrev_b32 v30, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v12 :: v_dual_lshrrev_b32 v32, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v14 :: v_dual_lshrrev_b32 v34, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v16 :: v_dual_lshrrev_b32 v36, 16, v17
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v21, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v22, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v23, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v24, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v25, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v26, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v30, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v32, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v34, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v36, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30919,6 +36953,278 @@ define inreg <36 x half> @bitcast_v36i16_to_v36f16_scalar(<36 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v23
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v24
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36i16_to_v36f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s46, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s46, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s46, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v2 :: v_dual_lshrrev_b32 v32, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v6 :: v_dual_lshrrev_b32 v28, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v8 :: v_dual_lshrrev_b32 v26, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v10 :: v_dual_lshrrev_b32 v24, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v12 :: v_dual_lshrrev_b32 v22, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v14 :: v_dual_lshrrev_b32 v20, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v16 :: v_dual_lshrrev_b32 v18, 16, v17
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v18, s45 :: v_dual_mov_b32 v19, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s43 :: v_dual_mov_b32 v21, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s41 :: v_dual_mov_b32 v23, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s15 :: v_dual_mov_b32 v25, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s13 :: v_dual_mov_b32 v27, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v29, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s9 :: v_dual_mov_b32 v31, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s8 :: v_dual_mov_b32 v33, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s4 :: v_dual_mov_b32 v35, s5
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36i16_to_v36f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s46, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s46, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s46, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v4 :: v_dual_lshrrev_b32 v28, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v10 :: v_dual_lshrrev_b32 v24, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v16 :: v_dual_lshrrev_b32 v20, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v14 :: v_dual_lshrrev_b32 v18, 16, v13
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s29 :: v_dual_mov_b32 v14, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v16, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s25 :: v_dual_mov_b32 v8, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s21 :: v_dual_mov_b32 v12, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s19 :: v_dual_mov_b32 v4, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s45 :: v_dual_mov_b32 v19, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s43 :: v_dual_mov_b32 v21, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s41 :: v_dual_mov_b32 v23, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s15 :: v_dual_mov_b32 v25, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s13 :: v_dual_mov_b32 v27, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v29, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s9 :: v_dual_mov_b32 v31, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s8 :: v_dual_mov_b32 v33, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s4 :: v_dual_mov_b32 v35, s5
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v35, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v34, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v33, 16, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v32, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v31, 16, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v29, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v28, 16, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v27, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v26, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v24, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v23, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v30, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v25, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v22, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v21, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v20, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v24
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31591,6 +37897,190 @@ define <36 x i16> @bitcast_v36f16_to_v36i16(<36 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v17, v36, v17, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36f16_to_v36i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v7 :: v_dual_lshrrev_b32 v25, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v5 :: v_dual_lshrrev_b32 v19, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v3 :: v_dual_lshrrev_b32 v21, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v1 :: v_dual_lshrrev_b32 v23, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v19.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v0 :: v_dual_lshrrev_b32 v22, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v2 :: v_dual_lshrrev_b32 v20, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v4 :: v_dual_lshrrev_b32 v24, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v6 :: v_dual_lshrrev_b32 v26, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v8 :: v_dual_lshrrev_b32 v28, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v10 :: v_dual_lshrrev_b32 v30, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v12 :: v_dual_lshrrev_b32 v32, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v14 :: v_dual_lshrrev_b32 v34, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v16 :: v_dual_lshrrev_b32 v36, 16, v17
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v36.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36f16_to_v36i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v9 :: v_dual_lshrrev_b32 v27, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v7 :: v_dual_lshrrev_b32 v25, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v5 :: v_dual_lshrrev_b32 v23, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v3 :: v_dual_lshrrev_b32 v21, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v1 :: v_dual_lshrrev_b32 v19, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v18
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v36, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v34, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v32, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v30, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v26, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v25, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v24, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v21, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v22, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v23, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v0 :: v_dual_lshrrev_b32 v20, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v2 :: v_dual_lshrrev_b32 v22, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v4 :: v_dual_lshrrev_b32 v24, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v6 :: v_dual_lshrrev_b32 v26, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v8 :: v_dual_lshrrev_b32 v28, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v10 :: v_dual_lshrrev_b32 v30, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v12 :: v_dual_lshrrev_b32 v32, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v14 :: v_dual_lshrrev_b32 v34, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v16 :: v_dual_lshrrev_b32 v36, 16, v17
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v19, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v20, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v21, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v22, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v23, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v24, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v25, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v26, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v27, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v28, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v30, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v32, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v34, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v36, v17, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32515,6 +39005,278 @@ define inreg <36 x i16> @bitcast_v36f16_to_v36i16_scalar(<36 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v23
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v24
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v36f16_to_v36i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s46, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s46, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s46, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v2 :: v_dual_lshrrev_b32 v32, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v6 :: v_dual_lshrrev_b32 v28, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v8 :: v_dual_lshrrev_b32 v26, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v10 :: v_dual_lshrrev_b32 v24, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v12 :: v_dual_lshrrev_b32 v22, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v14 :: v_dual_lshrrev_b32 v20, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v19, 16, v16 :: v_dual_lshrrev_b32 v18, 16, v17
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v18, s45 :: v_dual_mov_b32 v19, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s43 :: v_dual_mov_b32 v21, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s41 :: v_dual_mov_b32 v23, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s15 :: v_dual_mov_b32 v25, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s13 :: v_dual_mov_b32 v27, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v29, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s9 :: v_dual_mov_b32 v31, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s8 :: v_dual_mov_b32 v33, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s4 :: v_dual_mov_b32 v35, s5
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v19.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v18.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v36f16_to_v36i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s46, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s46, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s46, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s46, s46, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s46, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s46, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v2 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v4 :: v_dual_lshrrev_b32 v28, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v10 :: v_dual_lshrrev_b32 v24, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v8 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v16 :: v_dual_lshrrev_b32 v20, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v19, 16, v14 :: v_dual_lshrrev_b32 v18, 16, v13
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s29 :: v_dual_mov_b32 v14, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v16, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s25 :: v_dual_mov_b32 v8, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s21 :: v_dual_mov_b32 v12, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s19 :: v_dual_mov_b32 v4, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s45 :: v_dual_mov_b32 v19, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s43 :: v_dual_mov_b32 v21, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s41 :: v_dual_mov_b32 v23, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s15 :: v_dual_mov_b32 v25, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s13 :: v_dual_mov_b32 v27, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v29, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s9 :: v_dual_mov_b32 v31, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s8 :: v_dual_mov_b32 v33, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s4 :: v_dual_mov_b32 v35, s5
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v35, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v34, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v33, 16, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v32, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v31, 16, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v29, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v28, 16, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v27, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v26, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v24, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v23, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v30, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v25, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v22, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v21, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v20, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v19, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v18, 16, v24
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.640bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.640bit.ll
index 78b54755887fc..cf23a5ed87df0 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.640bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.640bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <20 x float> @bitcast_v20i32_to_v20f32(<20 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v20i32_to_v20f32:
@@ -139,6 +141,34 @@ define <20 x float> @bitcast_v20i32_to_v20f32(<20 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v20f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -406,6 +436,62 @@ define inreg <20 x float> @bitcast_v20i32_to_v20f32_scalar(<20 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v20f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -546,6 +632,34 @@ define <20 x i32> @bitcast_v20f32_to_v20i32(<20 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v20i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1047,6 +1161,62 @@ define inreg <20 x i32> @bitcast_v20f32_to_v20i32_scalar(<20 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v20i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1197,6 +1367,34 @@ define <10 x i64> @bitcast_v20i32_to_v10i64(<20 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v10i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1464,6 +1662,62 @@ define inreg <10 x i64> @bitcast_v20i32_to_v10i64_scalar(<20 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v10i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1619,6 +1873,49 @@ define <20 x i32> @bitcast_v10i64_to_v20i32(<10 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v20i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1886,6 +2183,52 @@ define inreg <20 x i32> @bitcast_v10i64_to_v20i32_scalar(<10 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v20i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v19, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2036,6 +2379,34 @@ define <10 x double> @bitcast_v20i32_to_v10f64(<20 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v10f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2303,6 +2674,62 @@ define inreg <10 x double> @bitcast_v20i32_to_v10f64_scalar(<20 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v10f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2413,6 +2840,34 @@ define <20 x i32> @bitcast_v10f64_to_v20i32(<10 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f64_to_v20i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2874,6 +3329,108 @@ define inreg <20 x i32> @bitcast_v10f64_to_v20i32_scalar(<10 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f64_to_v20i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3536,6 +4093,190 @@ define <40 x i16> @bitcast_v20i32_to_v40i16(<20 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v20i32_to_v40i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v20i32_to_v40i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4205,6 +4946,144 @@ define inreg <40 x i16> @bitcast_v20i32_to_v40i16_scalar(<20 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v40i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s22, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s23, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s24, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s25, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s26, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s27, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s28, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s29, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s6
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s15 :: v_dual_mov_b32 v11, s14
+; GFX13-NEXT: v_dual_mov_b32 v12, s13 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s11 :: v_dual_mov_b32 v15, s10
+; GFX13-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5139,6 +6018,190 @@ define <20 x i32> @bitcast_v40i16_to_v20i32(<40 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i16_to_v20i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i16_to_v20i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5942,6 +7005,108 @@ define inreg <20 x i32> @bitcast_v40i16_to_v20i32_scalar(<40 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i16_to_v20i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6604,6 +7769,190 @@ define <40 x half> @bitcast_v20i32_to_v40f16(<20 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v20i32_to_v40f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v20i32_to_v40f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7273,6 +8622,144 @@ define inreg <40 x half> @bitcast_v20i32_to_v40f16_scalar(<20 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20i32_to_v40f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s22, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s23, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s24, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s25, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s26, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s27, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s28, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s29, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s6
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s15 :: v_dual_mov_b32 v11, s14
+; GFX13-NEXT: v_dual_mov_b32 v12, s13 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s11 :: v_dual_mov_b32 v15, s10
+; GFX13-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8292,6 +9779,190 @@ define <20 x i32> @bitcast_v40f16_to_v20i32(<40 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40f16_to_v20i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40f16_to_v20i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9165,6 +10836,108 @@ define inreg <20 x i32> @bitcast_v40f16_to_v20i32_scalar(<40 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40f16_to_v20i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9305,6 +11078,34 @@ define <10 x i64> @bitcast_v20f32_to_v10i64(<20 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v10i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9806,6 +11607,62 @@ define inreg <10 x i64> @bitcast_v20f32_to_v10i64_scalar(<20 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v10i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9961,6 +11818,49 @@ define <20 x float> @bitcast_v10i64_to_v20f32(<10 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v20f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10228,6 +12128,52 @@ define inreg <20 x float> @bitcast_v10i64_to_v20f32_scalar(<10 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v20f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v19, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10368,6 +12314,34 @@ define <10 x double> @bitcast_v20f32_to_v10f64(<20 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v10f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10869,6 +12843,62 @@ define inreg <10 x double> @bitcast_v20f32_to_v10f64_scalar(<20 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v10f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10979,6 +13009,34 @@ define <20 x float> @bitcast_v10f64_to_v20f32(<10 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f64_to_v20f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11440,6 +13498,108 @@ define inreg <20 x float> @bitcast_v10f64_to_v20f32_scalar(<10 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f64_to_v20f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12082,6 +14242,190 @@ define <40 x i16> @bitcast_v20f32_to_v40i16(<20 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v20f32_to_v40i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v20f32_to_v40i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12994,6 +15338,144 @@ define inreg <40 x i16> @bitcast_v20f32_to_v40i16_scalar(<20 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v18, v21, 16, v25
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v19, v20, 16, v26
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v40i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s22, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s23, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s24, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s25, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s26, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s27, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s28, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s29, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s6
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s15 :: v_dual_mov_b32 v11, s14
+; GFX13-NEXT: v_dual_mov_b32 v12, s13 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s11 :: v_dual_mov_b32 v15, s10
+; GFX13-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13928,6 +16410,190 @@ define <20 x float> @bitcast_v40i16_to_v20f32(<40 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i16_to_v20f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i16_to_v20f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14731,6 +17397,108 @@ define inreg <20 x float> @bitcast_v40i16_to_v20f32_scalar(<40 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i16_to_v20f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15373,6 +18141,190 @@ define <40 x half> @bitcast_v20f32_to_v40f16(<20 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v20f32_to_v40f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v20f32_to_v40f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16285,6 +19237,144 @@ define inreg <40 x half> @bitcast_v20f32_to_v40f16_scalar(<20 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v18, v21, 16, v25
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v19, v20, 16, v26
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v20f32_to_v40f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s4, v1
+; GFX13-NEXT: v_readfirstlane_b32 s5, v0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s6, s4, 16
+; GFX13-NEXT: s_lshr_b32 s7, s5, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s22, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s23, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s24, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s25, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s26, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s27, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s28, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s29, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s6
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s15 :: v_dual_mov_b32 v11, s14
+; GFX13-NEXT: v_dual_mov_b32 v12, s13 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s11 :: v_dual_mov_b32 v15, s10
+; GFX13-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
+; GFX13-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17304,6 +20394,190 @@ define <20 x float> @bitcast_v40f16_to_v20f32(<40 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40f16_to_v20f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40f16_to_v20f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18177,6 +21451,108 @@ define inreg <20 x float> @bitcast_v40f16_to_v20f32_scalar(<40 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40f16_to_v20f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18332,6 +21708,49 @@ define <10 x double> @bitcast_v10i64_to_v10f64(<10 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v10f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18598,6 +22017,51 @@ define inreg <10 x double> @bitcast_v10i64_to_v10f64_scalar(<10 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v10f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_mov_b32 s6, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s6, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s6, s6, exec_lo
+; GFX13-NEXT: s_cselect_b32 s6, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v19, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18708,6 +22172,34 @@ define <10 x i64> @bitcast_v10f64_to_v10i64(<10 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f64_to_v10i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19169,6 +22661,108 @@ define inreg <10 x i64> @bitcast_v10f64_to_v10i64_scalar(<10 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10f64_to_v10i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19841,6 +23435,220 @@ define <40 x i16> @bitcast_v10i64_to_v40i16(<10 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10i64_to_v40i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10i64_to_v40i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20510,6 +24318,134 @@ define inreg <40 x i16> @bitcast_v10i64_to_v40i16_scalar(<10 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v40i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-NEXT: s_lshr_b32 s7, s4, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-NEXT: s_lshr_b32 s7, s4, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s22, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s23, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s24, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s25, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s26, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s27, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s28, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s29, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s6
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s15 :: v_dual_mov_b32 v11, s14
+; GFX13-NEXT: v_dual_mov_b32 v12, s13 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s11 :: v_dual_mov_b32 v15, s10
+; GFX13-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
+; GFX13-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v19, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21444,6 +25380,190 @@ define <10 x i64> @bitcast_v40i16_to_v10i64(<40 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i16_to_v10i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i16_to_v10i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22247,6 +26367,108 @@ define inreg <10 x i64> @bitcast_v40i16_to_v10i64_scalar(<40 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i16_to_v10i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22919,6 +27141,220 @@ define <40 x half> @bitcast_v10i64_to_v40f16(<10 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10i64_to_v40f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10i64_to_v40f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23588,6 +28024,134 @@ define inreg <40 x half> @bitcast_v10i64_to_v40f16_scalar(<10 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
; GFX11-NEXT: v_dual_mov_b32 v18, s5 :: v_dual_mov_b32 v19, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v10i64_to_v40f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-NEXT: s_mov_b32 s58, 0
+; GFX13-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-NEXT: s_lshr_b32 s7, s4, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s58, -1
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-NEXT: s_lshr_b32 s7, s4, 16
+; GFX13-NEXT: s_lshr_b32 s8, s29, 16
+; GFX13-NEXT: s_lshr_b32 s9, s28, 16
+; GFX13-NEXT: s_lshr_b32 s10, s27, 16
+; GFX13-NEXT: s_lshr_b32 s11, s26, 16
+; GFX13-NEXT: s_lshr_b32 s12, s25, 16
+; GFX13-NEXT: s_lshr_b32 s13, s24, 16
+; GFX13-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-NEXT: s_lshr_b32 s15, s22, 16
+; GFX13-NEXT: s_lshr_b32 s40, s21, 16
+; GFX13-NEXT: s_lshr_b32 s41, s20, 16
+; GFX13-NEXT: s_lshr_b32 s42, s19, 16
+; GFX13-NEXT: s_lshr_b32 s43, s18, 16
+; GFX13-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-NEXT: s_lshr_b32 s45, s16, 16
+; GFX13-NEXT: s_lshr_b32 s46, s3, 16
+; GFX13-NEXT: s_lshr_b32 s47, s2, 16
+; GFX13-NEXT: s_lshr_b32 s56, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s22, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s23, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s24, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s25, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s26, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s27, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s28, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s29, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s6
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s15 :: v_dual_mov_b32 v11, s14
+; GFX13-NEXT: v_dual_mov_b32 v12, s13 :: v_dual_mov_b32 v13, s12
+; GFX13-NEXT: v_dual_mov_b32 v14, s11 :: v_dual_mov_b32 v15, s10
+; GFX13-NEXT: v_dual_mov_b32 v16, s9 :: v_dual_mov_b32 v17, s8
+; GFX13-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v19, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24607,6 +29171,190 @@ define <10 x i64> @bitcast_v40f16_to_v10i64(<40 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40f16_to_v10i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40f16_to_v10i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25480,6 +30228,108 @@ define inreg <10 x i64> @bitcast_v40f16_to_v10i64_scalar(<40 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40f16_to_v10i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26092,6 +30942,190 @@ define <40 x i16> @bitcast_v10f64_to_v40i16(<10 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10f64_to_v40i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10f64_to_v40i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26954,6 +31988,285 @@ define inreg <40 x i16> @bitcast_v10f64_to_v40i16_scalar(<10 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v18, v23, 16, v20
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v19, v25, 16, v21
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10f64_to_v40i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s8, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s8, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr6
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v19 :: v_dual_lshrrev_b32 v20, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v17 :: v_dual_lshrrev_b32 v21, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v15 :: v_dual_lshrrev_b32 v23, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v13 :: v_dual_lshrrev_b32 v25, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v27, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v9 :: v_dual_lshrrev_b32 v29, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v31, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v5 :: v_dual_lshrrev_b32 v33, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v3 :: v_dual_lshrrev_b32 v35, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v37, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v3, s3
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v7, s19
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v11, s23
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v15, s27
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v19, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s58 :: v_dual_mov_b32 v35, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s56 :: v_dual_mov_b32 v31, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s46 :: v_dual_mov_b32 v27, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s44 :: v_dual_mov_b32 v23, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s42 :: v_dual_mov_b32 v20, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v39, s40 :: v_dual_mov_b32 v38, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s14 :: v_dual_mov_b32 v34, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s12 :: v_dual_mov_b32 v30, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s10 :: v_dual_mov_b32 v26, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10f64_to_v40i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s8, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s8, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr6
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[12:13], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[7:8], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v16 :: v_dual_lshrrev_b32 v23, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v18 :: v_dual_lshrrev_b32 v24, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v20 :: v_dual_lshrrev_b32 v14, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v28, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v29, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v9, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v22 :: v_dual_lshrrev_b32 v4, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s16 :: v_dual_mov_b32 v7, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s20 :: v_dual_mov_b32 v12, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s24 :: v_dual_mov_b32 v19, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s28 :: v_dual_mov_b32 v15, s4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v1, s3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s17 :: v_dual_mov_b32 v8, s19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s21 :: v_dual_mov_b32 v13, s23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s25 :: v_dual_mov_b32 v20, s27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s29 :: v_dual_mov_b32 v16, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s58 :: v_dual_mov_b32 v36, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s56 :: v_dual_mov_b32 v32, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s46 :: v_dual_mov_b32 v29, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s44 :: v_dual_mov_b32 v14, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s42 :: v_dual_mov_b32 v23, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, s40 :: v_dual_mov_b32 v38, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s14 :: v_dual_mov_b32 v34, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, s12 :: v_dual_mov_b32 v31, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s10 :: v_dual_mov_b32 v27, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v4, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v35, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v37, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v36, 16, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v32, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v34, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v9, 16, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v29, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v28, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v14, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v38, 16, v49
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v33, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v31, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v30, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v27, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v24, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v26, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v23, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v25, 16, v21
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27888,6 +33201,190 @@ define <10 x double> @bitcast_v40i16_to_v10f64(<40 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i16_to_v10f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i16_to_v10f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28691,6 +34188,108 @@ define inreg <10 x double> @bitcast_v40i16_to_v10f64_scalar(<40 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40i16_to_v10f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29303,6 +34902,190 @@ define <40 x half> @bitcast_v10f64_to_v40f16(<10 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10f64_to_v40f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr20_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10f64_to_v40f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr21
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr20
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v20, 16, v19 :: v_dual_lshrrev_b32 v21, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v17 :: v_dual_lshrrev_b32 v23, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v15 :: v_dual_lshrrev_b32 v25, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v13 :: v_dual_lshrrev_b32 v27, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v11 :: v_dual_lshrrev_b32 v29, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v39, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v37, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v36, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v29, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v28, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v27, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v26, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v25, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v24, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v23, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v22, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v21, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v20, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30165,6 +35948,285 @@ define inreg <40 x half> @bitcast_v10f64_to_v40f16_scalar(<10 x double> inreg %a
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v18, v23, 16, v20
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v19, v25, 16, v21
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v10f64_to_v40f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s8, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s8, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr6
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v19 :: v_dual_lshrrev_b32 v20, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v17 :: v_dual_lshrrev_b32 v21, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v15 :: v_dual_lshrrev_b32 v23, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v13 :: v_dual_lshrrev_b32 v25, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v27, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v9 :: v_dual_lshrrev_b32 v29, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v31, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v5 :: v_dual_lshrrev_b32 v33, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v3 :: v_dual_lshrrev_b32 v35, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v37, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v3, s3
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v7, s19
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v11, s23
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v15, s27
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v19, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s58 :: v_dual_mov_b32 v35, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s56 :: v_dual_mov_b32 v31, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s46 :: v_dual_mov_b32 v27, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s44 :: v_dual_mov_b32 v23, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s42 :: v_dual_mov_b32 v20, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v39, s40 :: v_dual_mov_b32 v38, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s14 :: v_dual_mov_b32 v34, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s12 :: v_dual_mov_b32 v30, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s10 :: v_dual_mov_b32 v26, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v20.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v10f64_to_v40f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s8, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s6, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s8, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr6
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[12:13], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[7:8], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v16 :: v_dual_lshrrev_b32 v23, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v18 :: v_dual_lshrrev_b32 v24, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v20 :: v_dual_lshrrev_b32 v14, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v11 :: v_dual_lshrrev_b32 v28, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v29, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v9, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v22 :: v_dual_lshrrev_b32 v4, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v1 :: v_dual_lshrrev_b32 v36, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v3 :: v_dual_lshrrev_b32 v37, 16, v2
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s16 :: v_dual_mov_b32 v7, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s20 :: v_dual_mov_b32 v12, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s24 :: v_dual_mov_b32 v19, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s28 :: v_dual_mov_b32 v15, s4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v1, s3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s17 :: v_dual_mov_b32 v8, s19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s21 :: v_dual_mov_b32 v13, s23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s25 :: v_dual_mov_b32 v20, s27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s29 :: v_dual_mov_b32 v16, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s58 :: v_dual_mov_b32 v36, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s56 :: v_dual_mov_b32 v32, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s46 :: v_dual_mov_b32 v29, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s44 :: v_dual_mov_b32 v14, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s42 :: v_dual_mov_b32 v23, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, s40 :: v_dual_mov_b32 v38, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s14 :: v_dual_mov_b32 v34, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, s12 :: v_dual_mov_b32 v31, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s10 :: v_dual_mov_b32 v27, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v4, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v35, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v37, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v36, 16, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v32, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v34, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v9, 16, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v29, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v28, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v14, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v39, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v38, 16, v49
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v33, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v31, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v30, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v27, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v24, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v26, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v23, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v25, 16, v21
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31184,6 +37246,190 @@ define <10 x double> @bitcast_v40f16_to_v10f64(<40 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40f16_to_v10f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr21_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40f16_to_v10f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v19 :: v_dual_lshrrev_b32 v22, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v17 :: v_dual_lshrrev_b32 v24, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v15 :: v_dual_lshrrev_b32 v26, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v13 :: v_dual_lshrrev_b32 v28, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v11 :: v_dual_lshrrev_b32 v30, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v9 :: v_dual_lshrrev_b32 v32, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v7 :: v_dual_lshrrev_b32 v34, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v5 :: v_dual_lshrrev_b32 v36, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v20
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v37, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v38, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v39, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v36, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v35, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v34, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v33, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v32, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v31, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v30, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v29, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v28, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v27, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v26, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v25, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v24, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v23, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v22, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v21, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32057,6 +38303,108 @@ define inreg <10 x double> @bitcast_v40f16_to_v10f64_scalar(<40 x half> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v40f16_to_v10f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v1
+; GFX13-NEXT: v_readfirstlane_b32 s46, v0
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s56, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33005,6 +39353,206 @@ define <40 x half> @bitcast_v40i16_to_v40f16(<40 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v39, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i16_to_v40f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v39, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v37, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v35, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v33, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v31, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v29, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v5 :: v_dual_lshrrev_b32 v21, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v3 :: v_dual_lshrrev_b32 v23, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v1 :: v_dual_lshrrev_b32 v25, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v0 :: v_dual_lshrrev_b32 v24, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v2 :: v_dual_lshrrev_b32 v22, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v4 :: v_dual_lshrrev_b32 v26, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v6 :: v_dual_lshrrev_b32 v28, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v8 :: v_dual_lshrrev_b32 v30, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v10 :: v_dual_lshrrev_b32 v32, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v12 :: v_dual_lshrrev_b32 v34, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v14 :: v_dual_lshrrev_b32 v36, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v16 :: v_dual_lshrrev_b32 v38, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v18 :: v_dual_lshrrev_b32 v48, 16, v19
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i16_to_v40f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v39, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v37, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v35, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v33, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v31, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v29, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v5 :: v_dual_lshrrev_b32 v25, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v3 :: v_dual_lshrrev_b32 v23, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v1 :: v_dual_lshrrev_b32 v21, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v39, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v37, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v33, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v31, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v29, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v27, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v26, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v21, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v22, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v23, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v24, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v25, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v0 :: v_dual_lshrrev_b32 v22, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v2 :: v_dual_lshrrev_b32 v24, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v4 :: v_dual_lshrrev_b32 v26, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v6 :: v_dual_lshrrev_b32 v28, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v8 :: v_dual_lshrrev_b32 v30, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v10 :: v_dual_lshrrev_b32 v32, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v12 :: v_dual_lshrrev_b32 v34, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v14 :: v_dual_lshrrev_b32 v36, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v16 :: v_dual_lshrrev_b32 v38, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v18 :: v_dual_lshrrev_b32 v48, 16, v19
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v21, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v22, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v23, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v24, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v25, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v26, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v27, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v29, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v31, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v33, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v37, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v39, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34082,6 +40630,306 @@ define inreg <40 x half> @bitcast_v40i16_to_v40f16_scalar(<40 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v18, v21, 16, v25
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v19, v20, 16, v26
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40i16_to_v40f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v2
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s57, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s56, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s57, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s56, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v4 :: v_dual_lshrrev_b32 v34, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v8 :: v_dual_lshrrev_b32 v30, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v10 :: v_dual_lshrrev_b32 v28, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v14 :: v_dual_lshrrev_b32 v24, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v16 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v18 :: v_dual_lshrrev_b32 v20, 16, v19
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s57 :: v_dual_mov_b32 v18, s56
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s47 :: v_dual_mov_b32 v21, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s45 :: v_dual_mov_b32 v23, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s43 :: v_dual_mov_b32 v25, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s41 :: v_dual_mov_b32 v27, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s15 :: v_dual_mov_b32 v29, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s11 :: v_dual_mov_b32 v33, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s9 :: v_dual_mov_b32 v35, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s6 :: v_dual_mov_b32 v37, s4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s5 :: v_dual_mov_b32 v39, s7
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40i16_to_v40f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v2
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s57, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s56, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s57, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s56, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s46, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v10 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v18 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v16 :: v_dual_lshrrev_b32 v20, 16, v15
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s57 :: v_dual_mov_b32 v16, s56
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v18, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s27 :: v_dual_mov_b32 v10, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s23 :: v_dual_mov_b32 v14, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s21 :: v_dual_mov_b32 v6, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v8, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s17 :: v_dual_mov_b32 v0, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v4, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s47 :: v_dual_mov_b32 v21, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s45 :: v_dual_mov_b32 v23, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s43 :: v_dual_mov_b32 v25, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s41 :: v_dual_mov_b32 v27, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s15 :: v_dual_mov_b32 v29, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s11 :: v_dual_mov_b32 v33, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s9 :: v_dual_mov_b32 v35, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s6 :: v_dual_mov_b32 v37, s4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s5 :: v_dual_mov_b32 v39, s7
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v38, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v36, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v35, 16, v49
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v34, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v33, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v31, 16, v35
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v30, 16, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v29, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v28, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v26, 16, v30
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v25, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v37, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v32, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v27, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v24, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v23, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v22, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v21, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v20, 16, v26
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34819,6 +41667,206 @@ define <40 x i16> @bitcast_v40f16_to_v40i16(<40 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v18, v39, v18, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40f16_to_v40i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v39, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v37, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v35, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v33, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v31, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v29, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v5 :: v_dual_lshrrev_b32 v21, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v3 :: v_dual_lshrrev_b32 v23, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v1 :: v_dual_lshrrev_b32 v25, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v21.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v0 :: v_dual_lshrrev_b32 v24, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v2 :: v_dual_lshrrev_b32 v22, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v4 :: v_dual_lshrrev_b32 v26, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v6 :: v_dual_lshrrev_b32 v28, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v8 :: v_dual_lshrrev_b32 v30, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v10 :: v_dual_lshrrev_b32 v32, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v12 :: v_dual_lshrrev_b32 v34, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v14 :: v_dual_lshrrev_b32 v36, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v16 :: v_dual_lshrrev_b32 v38, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v18 :: v_dual_lshrrev_b32 v48, 16, v19
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40f16_to_v40i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v39, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v37, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v35, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v33, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v31, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v9 :: v_dual_lshrrev_b32 v29, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v7 :: v_dual_lshrrev_b32 v27, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v5 :: v_dual_lshrrev_b32 v25, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v3 :: v_dual_lshrrev_b32 v23, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v1 :: v_dual_lshrrev_b32 v21, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v20
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v39, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v37, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v33, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v31, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v29, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v27, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v26, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v21, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v22, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v23, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v24, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v25, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v0 :: v_dual_lshrrev_b32 v22, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v2 :: v_dual_lshrrev_b32 v24, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v4 :: v_dual_lshrrev_b32 v26, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v6 :: v_dual_lshrrev_b32 v28, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v8 :: v_dual_lshrrev_b32 v30, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v10 :: v_dual_lshrrev_b32 v32, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v12 :: v_dual_lshrrev_b32 v34, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v14 :: v_dual_lshrrev_b32 v36, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v16 :: v_dual_lshrrev_b32 v38, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v18 :: v_dual_lshrrev_b32 v48, 16, v19
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v21, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v22, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v23, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v24, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v25, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v26, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v27, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v28, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v29, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v30, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v31, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v33, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v35, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v37, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v39, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35850,6 +42898,306 @@ define inreg <40 x i16> @bitcast_v40f16_to_v40i16_scalar(<40 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v18, v21, 16, v25
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v19, v20, 16, v26
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v40f16_to_v40i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s56, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v2
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s57, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s56, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s58, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s57, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s56, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v0 :: v_dual_lshrrev_b32 v38, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v4 :: v_dual_lshrrev_b32 v34, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v8 :: v_dual_lshrrev_b32 v30, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v10 :: v_dual_lshrrev_b32 v28, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v14 :: v_dual_lshrrev_b32 v24, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v16 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v21, 16, v18 :: v_dual_lshrrev_b32 v20, 16, v19
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s57 :: v_dual_mov_b32 v18, s56
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s47 :: v_dual_mov_b32 v21, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s45 :: v_dual_mov_b32 v23, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s43 :: v_dual_mov_b32 v25, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s41 :: v_dual_mov_b32 v27, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s15 :: v_dual_mov_b32 v29, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s11 :: v_dual_mov_b32 v33, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s9 :: v_dual_mov_b32 v35, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s6 :: v_dual_mov_b32 v37, s4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s5 :: v_dual_mov_b32 v39, s7
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v38.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v21.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v20.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v40f16_to_v40i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s56, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v2
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s57, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s56, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s58, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s58, s58, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s58, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s58, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s57, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s56, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v10 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v18 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v21, 16, v16 :: v_dual_lshrrev_b32 v20, 16, v15
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s57 :: v_dual_mov_b32 v16, s56
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v18, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s27 :: v_dual_mov_b32 v10, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s23 :: v_dual_mov_b32 v14, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s21 :: v_dual_mov_b32 v6, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v8, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s17 :: v_dual_mov_b32 v0, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v4, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s47 :: v_dual_mov_b32 v21, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s45 :: v_dual_mov_b32 v23, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s43 :: v_dual_mov_b32 v25, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s41 :: v_dual_mov_b32 v27, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s15 :: v_dual_mov_b32 v29, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s11 :: v_dual_mov_b32 v33, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s9 :: v_dual_mov_b32 v35, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s6 :: v_dual_mov_b32 v37, s4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s5 :: v_dual_mov_b32 v39, s7
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v38, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v36, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v35, 16, v49
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v34, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v33, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v31, 16, v35
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v30, 16, v36
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v29, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v28, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v26, 16, v30
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v25, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v37, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v32, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v27, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v24, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v23, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v22, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v21, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v20, 16, v26
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.64bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.64bit.ll
index 275118e33eeab..2e690839606e6 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.64bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.64bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define double @bitcast_i64_to_f64(i64 %a, i32 %b) #0 {
; SI-LABEL: bitcast_i64_to_f64:
@@ -64,6 +66,26 @@ define double @bitcast_i64_to_f64(i64 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -172,6 +194,31 @@ define inreg double @bitcast_i64_to_f64_scalar(i64 inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -243,6 +290,25 @@ define i64 @bitcast_f64_to_i64(double %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -350,6 +416,31 @@ define inreg i64 @bitcast_f64_to_i64_scalar(double inreg %a, i32 inreg %b) #0 {
; GFX11-NEXT: .LBB3_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB3_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -425,6 +516,26 @@ define <2 x i32> @bitcast_i64_to_v2i32(i64 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v2i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -533,6 +644,31 @@ define inreg <2 x i32> @bitcast_i64_to_v2i32_scalar(i64 inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -607,6 +743,24 @@ define i64 @bitcast_v2i32_to_i64(<2 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -715,6 +869,32 @@ define inreg i64 @bitcast_v2i32_to_i64_scalar(<2 x i32> inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -790,6 +970,26 @@ define <2 x float> @bitcast_i64_to_v2f32(i64 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v2f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -898,6 +1098,31 @@ define inreg <2 x float> @bitcast_i64_to_v2f32_scalar(i64 inreg %a, i32 inreg %b
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -971,6 +1196,24 @@ define i64 @bitcast_v2f32_to_i64(<2 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1082,6 +1325,32 @@ define inreg i64 @bitcast_v2f32_to_i64_scalar(<2 x float> inreg %a, i32 inreg %b
; GFX11-NEXT: .LBB11_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB11_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1171,6 +1440,26 @@ define <4 x i16> @bitcast_i64_to_v4i16(i64 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v4i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1291,6 +1580,31 @@ define inreg <4 x i16> @bitcast_i64_to_v4i16_scalar(i64 inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1399,6 +1713,25 @@ define i64 @bitcast_v4i16_to_i64(<4 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1533,6 +1866,32 @@ define inreg i64 @bitcast_v4i16_to_i64_scalar(<4 x i16> inreg %a, i32 inreg %b)
; GFX11-NEXT: .LBB15_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1622,6 +1981,26 @@ define <4 x half> @bitcast_i64_to_v4f16(i64 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v4f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1742,6 +2121,31 @@ define inreg <4 x half> @bitcast_i64_to_v4f16_scalar(i64 inreg %a, i32 inreg %b)
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1859,6 +2263,25 @@ define i64 @bitcast_v4f16_to_i64(<4 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2003,6 +2426,32 @@ define inreg i64 @bitcast_v4f16_to_i64_scalar(<4 x half> inreg %a, i32 inreg %b)
; GFX11-NEXT: .LBB19_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2102,6 +2551,26 @@ define <4 x bfloat> @bitcast_i64_to_v4bf16(i64 %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v4bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2228,6 +2697,31 @@ define inreg <4 x bfloat> @bitcast_i64_to_v4bf16_scalar(i64 inreg %a, i32 inreg
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2491,6 +2985,25 @@ define i64 @bitcast_v4bf16_to_i64(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB22_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2797,6 +3310,32 @@ define inreg i64 @bitcast_v4bf16_to_i64_scalar(<4 x bfloat> inreg %a, i32 inreg
; GFX11-FAKE16-NEXT: .LBB23_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB23_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3015,6 +3554,88 @@ define <8 x i8> @bitcast_i64_to_v8i8(i64 %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_i64_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, v3, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v4, null, 0, v4, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v1, 8, v3 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v5, 8, v4
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_i64_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v1, 8, v8 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 8, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3218,6 +3839,55 @@ define inreg <8 x i8> @bitcast_i64_to_v8i8_scalar(i64 inreg %a, i32 inreg %b) #0
; GFX11-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v7, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_i64_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB25_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-NEXT: s_lshr_b32 s5, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: s_branch .LBB25_3
+; GFX13-NEXT: .LBB25_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: .LBB25_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-NEXT: s_lshr_b32 s5, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: .LBB25_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s7
+; GFX13-NEXT: v_dual_mov_b32 v2, s6 :: v_dual_mov_b32 v3, s2
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v7, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3547,6 +4217,133 @@ define i64 @bitcast_v8i8_to_i64(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB26_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB26_4
+; GFX13-TRUE16-NEXT: .LBB26_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB26_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-TRUE16-NEXT: .LBB26_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB26_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB26_4
+; GFX13-FAKE16-NEXT: .LBB26_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB26_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-FAKE16-NEXT: .LBB26_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3794,6 +4591,64 @@ define inreg i64 @bitcast_v8i8_to_i64_scalar(<8 x i8> inreg %a, i32 inreg %b) #0
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB27_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB27_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB27_3
+; GFX13-NEXT: .LBB27_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB27_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3865,6 +4720,25 @@ define <2 x i32> @bitcast_f64_to_v2i32(double %a, i32 %b) #0 {
; GFX11-NEXT: .LBB28_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v2i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB28_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3972,6 +4846,31 @@ define inreg <2 x i32> @bitcast_f64_to_v2i32_scalar(double inreg %a, i32 inreg %
; GFX11-NEXT: .LBB29_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB29_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4046,6 +4945,24 @@ define double @bitcast_v2i32_to_f64(<2 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4154,6 +5071,32 @@ define inreg double @bitcast_v2i32_to_f64_scalar(<2 x i32> inreg %a, i32 inreg %
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB31_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4225,6 +5168,25 @@ define <2 x float> @bitcast_f64_to_v2f32(double %a, i32 %b) #0 {
; GFX11-NEXT: .LBB32_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v2f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB32_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4332,6 +5294,31 @@ define inreg <2 x float> @bitcast_f64_to_v2f32_scalar(double inreg %a, i32 inreg
; GFX11-NEXT: .LBB33_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB33_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4405,6 +5392,24 @@ define double @bitcast_v2f32_to_f64(<2 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4516,6 +5521,32 @@ define inreg double @bitcast_v2f32_to_f64_scalar(<2 x float> inreg %a, i32 inreg
; GFX11-NEXT: .LBB35_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB35_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4601,6 +5632,25 @@ define <4 x i16> @bitcast_f64_to_v4i16(double %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v4i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4723,6 +5773,31 @@ define inreg <4 x i16> @bitcast_f64_to_v4i16_scalar(double inreg %a, i32 inreg %
; GFX11-NEXT: .LBB37_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB37_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4831,6 +5906,25 @@ define double @bitcast_v4i16_to_f64(<4 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4965,6 +6059,32 @@ define inreg double @bitcast_v4i16_to_f64_scalar(<4 x i16> inreg %a, i32 inreg %
; GFX11-NEXT: .LBB39_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5050,6 +6170,25 @@ define <4 x half> @bitcast_f64_to_v4f16(double %a, i32 %b) #0 {
; GFX11-NEXT: .LBB40_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v4f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB40_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5172,6 +6311,31 @@ define inreg <4 x half> @bitcast_f64_to_v4f16_scalar(double inreg %a, i32 inreg
; GFX11-NEXT: .LBB41_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB41_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB41_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5289,6 +6453,25 @@ define double @bitcast_v4f16_to_f64(<4 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5433,6 +6616,32 @@ define inreg double @bitcast_v4f16_to_f64_scalar(<4 x half> inreg %a, i32 inreg
; GFX11-NEXT: .LBB43_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5527,6 +6736,25 @@ define <4 x bfloat> @bitcast_f64_to_v4bf16(double %a, i32 %b) #0 {
; GFX11-NEXT: .LBB44_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v4bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB44_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5657,6 +6885,31 @@ define inreg <4 x bfloat> @bitcast_f64_to_v4bf16_scalar(double inreg %a, i32 inr
; GFX11-NEXT: .LBB45_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB45_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB45_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5920,6 +7173,25 @@ define double @bitcast_v4bf16_to_f64(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6226,6 +7498,32 @@ define inreg double @bitcast_v4bf16_to_f64_scalar(<4 x bfloat> inreg %a, i32 inr
; GFX11-FAKE16-NEXT: .LBB47_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6436,6 +7734,85 @@ define <8 x i8> @bitcast_f64_to_v8i8(double %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_f64_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[3:4], 1.0, v[3:4]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_f64_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6653,6 +8030,56 @@ define inreg <8 x i8> @bitcast_f64_to_v8i8_scalar(double inreg %a, i32 inreg %b)
; GFX11-NEXT: v_mov_b32_e32 v0, v8
; GFX11-NEXT: v_mov_b32_e32 v4, v9
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_f64_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s6, s1, 24
+; GFX13-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-NEXT: s_lshr_b32 s3, s1, 8
+; GFX13-NEXT: s_lshr_b32 s8, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: s_branch .LBB49_3
+; GFX13-NEXT: .LBB49_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB49_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[0:1], 1.0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-NEXT: s_branch .LBB49_6
+; GFX13-NEXT: .LBB49_5:
+; GFX13-NEXT: v_dual_mov_b32 v8, s0 :: v_dual_mov_b32 v9, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s8 :: v_dual_mov_b32 v1, s7
+; GFX13-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v7, s6
+; GFX13-NEXT: v_dual_mov_b32 v6, s5 :: v_dual_mov_b32 v5, s3
+; GFX13-NEXT: .LBB49_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6982,6 +8409,133 @@ define double @bitcast_v8i8_to_f64(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7229,6 +8783,64 @@ define inreg double @bitcast_v8i8_to_f64_scalar(<8 x i8> inreg %a, i32 inreg %b)
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB51_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB51_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB51_3
+; GFX13-NEXT: .LBB51_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB51_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB51_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7303,6 +8915,24 @@ define <2 x float> @bitcast_v2i32_to_v2f32(<2 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v2f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7411,6 +9041,32 @@ define inreg <2 x float> @bitcast_v2i32_to_v2f32_scalar(<2 x i32> inreg %a, i32
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB53_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7484,6 +9140,24 @@ define <2 x i32> @bitcast_v2f32_to_v2i32(<2 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v2i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7595,6 +9269,32 @@ define inreg <2 x i32> @bitcast_v2f32_to_v2i32_scalar(<2 x float> inreg %a, i32
; GFX11-NEXT: .LBB55_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB55_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7683,6 +9383,24 @@ define <4 x i16> @bitcast_v2i32_to_v4i16(<2 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v4i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7803,6 +9521,32 @@ define inreg <4 x i16> @bitcast_v2i32_to_v4i16_scalar(<2 x i32> inreg %a, i32 in
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB57_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7911,6 +9655,25 @@ define <2 x i32> @bitcast_v4i16_to_v2i32(<4 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v2i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8045,6 +9808,32 @@ define inreg <2 x i32> @bitcast_v4i16_to_v2i32_scalar(<4 x i16> inreg %a, i32 in
; GFX11-NEXT: .LBB59_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8133,6 +9922,24 @@ define <4 x half> @bitcast_v2i32_to_v4f16(<2 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v4f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8253,6 +10060,32 @@ define inreg <4 x half> @bitcast_v2i32_to_v4f16_scalar(<2 x i32> inreg %a, i32 i
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB61_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB61_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB61_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8370,6 +10203,25 @@ define <2 x i32> @bitcast_v4f16_to_v2i32(<4 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v2i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8514,6 +10366,32 @@ define inreg <2 x i32> @bitcast_v4f16_to_v2i32_scalar(<4 x half> inreg %a, i32 i
; GFX11-NEXT: .LBB63_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB63_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB63_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB63_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8612,6 +10490,24 @@ define <4 x bfloat> @bitcast_v2i32_to_v4bf16(<2 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v4bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8738,6 +10634,32 @@ define inreg <4 x bfloat> @bitcast_v2i32_to_v4bf16_scalar(<2 x i32> inreg %a, i3
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB65_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB65_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB65_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9001,6 +10923,25 @@ define <2 x i32> @bitcast_v4bf16_to_v2i32(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB66_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v2i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9307,6 +11248,32 @@ define inreg <2 x i32> @bitcast_v4bf16_to_v2i32_scalar(<4 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: .LBB67_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB67_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB67_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB67_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9523,6 +11490,84 @@ define <8 x i8> @bitcast_v2i32_to_v8i8(<2 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2i32_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v4, 3, v4 :: v_dual_add_nc_u32 v3, 3, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2i32_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9726,6 +11771,55 @@ define inreg <8 x i8> @bitcast_v2i32_to_v8i8_scalar(<2 x i32> inreg %a, i32 inre
; GFX11-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s5
; GFX11-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v7, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2i32_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB69_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-NEXT: s_lshr_b32 s5, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: s_branch .LBB69_3
+; GFX13-NEXT: .LBB69_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: .LBB69_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB69_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s5, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: .LBB69_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s7
+; GFX13-NEXT: v_dual_mov_b32 v2, s6 :: v_dual_mov_b32 v3, s2
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v7, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10055,6 +12149,133 @@ define <2 x i32> @bitcast_v8i8_to_v2i32(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_v2i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-TRUE16-NEXT: .LBB70_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-TRUE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_v2i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB70_4
+; GFX13-FAKE16-NEXT: .LBB70_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB70_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB70_2
+; GFX13-FAKE16-NEXT: .LBB70_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10302,6 +12523,64 @@ define inreg <2 x i32> @bitcast_v8i8_to_v2i32_scalar(<8 x i8> inreg %a, i32 inre
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB71_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_v2i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB71_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB71_3
+; GFX13-NEXT: .LBB71_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB71_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB71_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB71_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10389,6 +12668,24 @@ define <4 x i16> @bitcast_v2f32_to_v4i16(<2 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v4i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10515,6 +12812,32 @@ define inreg <4 x i16> @bitcast_v2f32_to_v4i16_scalar(<2 x float> inreg %a, i32
; GFX11-NEXT: .LBB73_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB73_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB73_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB73_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10623,6 +12946,25 @@ define <2 x float> @bitcast_v4i16_to_v2f32(<4 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v2f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10757,6 +13099,32 @@ define inreg <2 x float> @bitcast_v4i16_to_v2f32_scalar(<4 x i16> inreg %a, i32
; GFX11-NEXT: .LBB75_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB75_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB75_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB75_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10844,6 +13212,24 @@ define <4 x half> @bitcast_v2f32_to_v4f16(<2 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v4f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10970,6 +13356,32 @@ define inreg <4 x half> @bitcast_v2f32_to_v4f16_scalar(<2 x float> inreg %a, i32
; GFX11-NEXT: .LBB77_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB77_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB77_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB77_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11087,6 +13499,25 @@ define <2 x float> @bitcast_v4f16_to_v2f32(<4 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v2f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11231,6 +13662,32 @@ define inreg <2 x float> @bitcast_v4f16_to_v2f32_scalar(<4 x half> inreg %a, i32
; GFX11-NEXT: .LBB79_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB79_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB79_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB79_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11328,6 +13785,24 @@ define <4 x bfloat> @bitcast_v2f32_to_v4bf16(<2 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v4bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11462,6 +13937,32 @@ define inreg <4 x bfloat> @bitcast_v2f32_to_v4bf16_scalar(<2 x float> inreg %a,
; GFX11-NEXT: .LBB81_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB81_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB81_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB81_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11725,6 +14226,25 @@ define <2 x float> @bitcast_v4bf16_to_v2f32(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB82_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v2f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12031,6 +14551,32 @@ define inreg <2 x float> @bitcast_v4bf16_to_v2f32_scalar(<4 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: .LBB83_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB83_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB83_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB83_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12245,6 +14791,84 @@ define <8 x i8> @bitcast_v2f32_to_v8i8(<2 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v2f32_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v4, 1.0, v4 :: v_dual_add_f32 v3, 1.0, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v2f32_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12466,6 +15090,56 @@ define inreg <8 x i8> @bitcast_v2f32_to_v8i8_scalar(<2 x float> inreg %a, i32 in
; GFX11-NEXT: v_mov_b32_e32 v0, v8
; GFX11-NEXT: v_mov_b32_e32 v4, v9
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v2f32_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB85_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-NEXT: s_lshr_b32 s5, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: s_branch .LBB85_3
+; GFX13-NEXT: .LBB85_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: .LBB85_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB85_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_2) | instskip(NEXT) | instid1(SALU_CYCLE_2)
+; GFX13-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s5, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s7, s0, 8
+; GFX13-NEXT: .LBB85_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s7
+; GFX13-NEXT: v_dual_mov_b32 v2, s6 :: v_dual_mov_b32 v3, s2
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s4 :: v_dual_mov_b32 v7, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12795,6 +15469,133 @@ define <2 x float> @bitcast_v8i8_to_v2f32(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_v2f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB86_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB86_4
+; GFX13-TRUE16-NEXT: .LBB86_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB86_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-TRUE16-NEXT: .LBB86_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_v2f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB86_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB86_4
+; GFX13-FAKE16-NEXT: .LBB86_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB86_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB86_2
+; GFX13-FAKE16-NEXT: .LBB86_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13042,6 +15843,64 @@ define inreg <2 x float> @bitcast_v8i8_to_v2f32_scalar(<8 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB87_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_v2f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB87_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB87_3
+; GFX13-NEXT: .LBB87_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB87_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB87_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB87_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13154,6 +16013,25 @@ define <4 x half> @bitcast_v4i16_to_v4f16(<4 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v4f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13299,6 +16177,32 @@ define inreg <4 x half> @bitcast_v4i16_to_v4f16_scalar(<4 x i16> inreg %a, i32 i
; GFX11-NEXT: .LBB89_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB89_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB89_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB89_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB89_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13403,6 +16307,25 @@ define <4 x i16> @bitcast_v4f16_to_v4i16(<4 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v4i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13550,6 +16473,32 @@ define inreg <4 x i16> @bitcast_v4f16_to_v4i16_scalar(<4 x half> inreg %a, i32 i
; GFX11-NEXT: .LBB91_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB91_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB91_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB91_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13660,6 +16609,25 @@ define <4 x bfloat> @bitcast_v4i16_to_v4bf16(<4 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v4bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13805,6 +16773,32 @@ define inreg <4 x bfloat> @bitcast_v4i16_to_v4bf16_scalar(<4 x i16> inreg %a, i3
; GFX11-NEXT: .LBB93_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB93_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB93_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB93_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB93_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14078,6 +17072,25 @@ define <4 x i16> @bitcast_v4bf16_to_v4i16(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB94_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v4i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14383,6 +17396,32 @@ define inreg <4 x i16> @bitcast_v4bf16_to_v4i16_scalar(<4 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: .LBB95_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB95_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB95_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB95_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14626,6 +17665,86 @@ define <8 x i8> @bitcast_v4i16_to_v8i8(<4 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4i16_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4i16_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14863,6 +17982,57 @@ define inreg <8 x i8> @bitcast_v4i16_to_v8i8_scalar(<4 x i16> inreg %a, i32 inre
; GFX11-NEXT: v_mov_b32_e32 v0, v8
; GFX11-NEXT: v_mov_b32_e32 v4, v9
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4i16_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB97_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-NEXT: s_lshr_b32 s7, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s8, s0, 8
+; GFX13-NEXT: s_branch .LBB97_3
+; GFX13-NEXT: .LBB97_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: .LBB97_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB97_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v9, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-NEXT: s_branch .LBB97_6
+; GFX13-NEXT: .LBB97_5:
+; GFX13-NEXT: v_dual_mov_b32 v8, s0 :: v_dual_mov_b32 v9, s1
+; GFX13-NEXT: v_dual_mov_b32 v1, s8 :: v_dual_mov_b32 v2, s6
+; GFX13-NEXT: v_dual_mov_b32 v5, s7 :: v_dual_mov_b32 v6, s5
+; GFX13-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v3, s2
+; GFX13-NEXT: .LBB97_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15200,6 +18370,133 @@ define <4 x i16> @bitcast_v8i8_to_v4i16(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_v4i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB98_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB98_4
+; GFX13-TRUE16-NEXT: .LBB98_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB98_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-TRUE16-NEXT: .LBB98_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_v4i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB98_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB98_4
+; GFX13-FAKE16-NEXT: .LBB98_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB98_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB98_2
+; GFX13-FAKE16-NEXT: .LBB98_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15460,6 +18757,64 @@ define inreg <4 x i16> @bitcast_v8i8_to_v4i16_scalar(<8 x i8> inreg %a, i32 inre
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB99_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_v4i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB99_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB99_3
+; GFX13-NEXT: .LBB99_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB99_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB99_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB99_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15579,6 +18934,25 @@ define <4 x bfloat> @bitcast_v4f16_to_v4bf16(<4 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v4bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15735,6 +19109,32 @@ define inreg <4 x bfloat> @bitcast_v4f16_to_v4bf16_scalar(<4 x half> inreg %a, i
; GFX11-NEXT: .LBB101_4:
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB101_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB101_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB101_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16006,6 +19406,25 @@ define <4 x half> @bitcast_v4bf16_to_v4f16(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB102_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v4f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v2
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16325,6 +19744,32 @@ define inreg <4 x half> @bitcast_v4bf16_to_v4f16_scalar(<4 x bfloat> inreg %a, i
; GFX11-FAKE16-NEXT: .LBB103_4:
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s2, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s2, -1
+; GFX13-NEXT: .LBB103_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s2, s2, exec_lo
+; GFX13-NEXT: s_cselect_b32 s2, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB103_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB103_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16572,6 +20017,86 @@ define <8 x i8> @bitcast_v4f16_to_v8i8(<4 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4f16_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4f16_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16819,6 +20344,57 @@ define inreg <8 x i8> @bitcast_v4f16_to_v8i8_scalar(<4 x half> inreg %a, i32 inr
; GFX11-NEXT: v_mov_b32_e32 v0, v8
; GFX11-NEXT: v_mov_b32_e32 v4, v9
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4f16_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB105_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-NEXT: s_lshr_b32 s7, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s8, s0, 8
+; GFX13-NEXT: s_branch .LBB105_3
+; GFX13-NEXT: .LBB105_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: .LBB105_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB105_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-NEXT: s_branch .LBB105_6
+; GFX13-NEXT: .LBB105_5:
+; GFX13-NEXT: v_dual_mov_b32 v8, s0 :: v_dual_mov_b32 v9, s1
+; GFX13-NEXT: v_dual_mov_b32 v1, s8 :: v_dual_mov_b32 v2, s6
+; GFX13-NEXT: v_dual_mov_b32 v5, s7 :: v_dual_mov_b32 v6, s5
+; GFX13-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v3, s2
+; GFX13-NEXT: .LBB105_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17156,6 +20732,133 @@ define <4 x half> @bitcast_v8i8_to_v4f16(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_v4f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB106_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB106_4
+; GFX13-TRUE16-NEXT: .LBB106_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB106_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-TRUE16-NEXT: .LBB106_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_v4f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB106_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB106_4
+; GFX13-FAKE16-NEXT: .LBB106_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB106_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB106_2
+; GFX13-FAKE16-NEXT: .LBB106_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17416,6 +21119,64 @@ define inreg <4 x half> @bitcast_v8i8_to_v4f16_scalar(<8 x i8> inreg %a, i32 inr
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB107_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_v4f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB107_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB107_3
+; GFX13-NEXT: .LBB107_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB107_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB107_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB107_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17802,6 +21563,86 @@ define <8 x i8> @bitcast_v4bf16_to_v8i8(<4 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v8
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v9
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v4bf16_to_v8i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v3, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v4, 0x40c0, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v3, 0x40c0, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v4 :: v_dual_lshrrev_b32 v6, 16, v4
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[8:9], 24, v[3:4]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v4 :: v_dual_lshrrev_b32 v2, 16, v3
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v3
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v3.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.l, v8.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v4bf16_to_v8i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v9, 0x40c0, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v8, 0x40c0, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18228,6 +22069,57 @@ define inreg <8 x i8> @bitcast_v4bf16_to_v8i8_scalar(<4 x bfloat> inreg %a, i32
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s7 :: v_dual_mov_b32 v1, s3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v4, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v4bf16_to_v8i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s2, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB109_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b64 s[2:3], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s3, s1, 24
+; GFX13-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-NEXT: s_lshr_b32 s7, s1, 8
+; GFX13-NEXT: s_lshr_b32 s6, s0, 16
+; GFX13-NEXT: s_lshr_b32 s8, s0, 8
+; GFX13-NEXT: s_branch .LBB109_3
+; GFX13-NEXT: .LBB109_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: ; implicit-def: $sgpr2
+; GFX13-NEXT: ; implicit-def: $sgpr7
+; GFX13-NEXT: ; implicit-def: $sgpr5
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: .LBB109_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB109_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v9, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v9 :: v_dual_lshrrev_b32 v6, 16, v9
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[8:9]
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v9 :: v_dual_lshrrev_b32 v2, 16, v8
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v8
+; GFX13-NEXT: s_branch .LBB109_6
+; GFX13-NEXT: .LBB109_5:
+; GFX13-NEXT: v_dual_mov_b32 v8, s0 :: v_dual_mov_b32 v9, s1
+; GFX13-NEXT: v_dual_mov_b32 v1, s8 :: v_dual_mov_b32 v2, s6
+; GFX13-NEXT: v_dual_mov_b32 v5, s7 :: v_dual_mov_b32 v6, s5
+; GFX13-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v3, s2
+; GFX13-NEXT: .LBB109_6: ; %end
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v4, v9
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18566,6 +22458,133 @@ define <4 x bfloat> @bitcast_v8i8_to_v4bf16(<8 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v8i8_to_v4bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB110_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB110_4
+; GFX13-TRUE16-NEXT: .LBB110_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB110_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v10, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-TRUE16-NEXT: .LBB110_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v2.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v2.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.l, v6.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.h, 8, v7.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.h, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v2.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v3.h, v3.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v0.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v1.h
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v8i8_to_v4bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v8
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB110_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB110_4
+; GFX13-FAKE16-NEXT: .LBB110_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB110_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v9, v10, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v2, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB110_2
+; GFX13-FAKE16-NEXT: .LBB110_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v9, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v10
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v5, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, v6, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v5, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v6, v3, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v4
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v2, 16, v3
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18824,6 +22843,64 @@ define inreg <4 x bfloat> @bitcast_v8i8_to_v4bf16_scalar(<8 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v1, v3, v4
; GFX11-NEXT: .LBB111_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v8i8_to_v4bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s20, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB111_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_perm_b32 v1, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v2, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v3, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v4, s16, s17, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v1 :: v_dual_lshlrev_b32 v1, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v4, v1
+; GFX13-NEXT: v_or_b32_e32 v0, v3, v0
+; GFX13-NEXT: s_branch .LBB111_3
+; GFX13-NEXT: .LBB111_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1
+; GFX13-NEXT: .LBB111_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB111_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v0, s18, s19, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_dual_lshlrev_b32 v4, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: .LBB111_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.704bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.704bit.ll
index 2a5574397fad8..495763aefdf95 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.704bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.704bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <22 x float> @bitcast_v22i32_to_v22f32(<22 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v22i32_to_v22f32:
@@ -147,6 +149,35 @@ define <22 x float> @bitcast_v22i32_to_v22f32(<22 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v22f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -437,6 +468,67 @@ define inreg <22 x float> @bitcast_v22i32_to_v22f32_scalar(<22 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v22f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -584,6 +676,35 @@ define <22 x i32> @bitcast_v22f32_to_v22i32(<22 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v22i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1101,6 +1222,67 @@ define inreg <22 x i32> @bitcast_v22f32_to_v22i32_scalar(<22 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v22i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1259,6 +1441,35 @@ define <11 x i64> @bitcast_v22i32_to_v11i64(<22 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v11i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1549,6 +1760,67 @@ define inreg <11 x i64> @bitcast_v22i32_to_v11i64_scalar(<22 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v11i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1713,6 +1985,52 @@ define <22 x i32> @bitcast_v11i64_to_v22i32(<11 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v22i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2003,6 +2321,56 @@ define inreg <22 x i32> @bitcast_v11i64_to_v22i32_scalar(<11 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v22i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s6 :: v_dual_mov_b32 v19, s7
+; GFX13-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v21, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2161,6 +2529,35 @@ define <11 x double> @bitcast_v22i32_to_v11f64(<22 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v11f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2451,6 +2848,67 @@ define inreg <11 x double> @bitcast_v22i32_to_v11f64_scalar(<22 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v11f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2565,6 +3023,35 @@ define <22 x i32> @bitcast_v11f64_to_v22i32(<11 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f64_to_v22i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3038,6 +3525,111 @@ define inreg <22 x i32> @bitcast_v11f64_to_v22i32_scalar(<11 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f64_to_v22i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3756,6 +4348,204 @@ define <44 x i16> @bitcast_v22i32_to_v44i16(<22 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v22i32_to_v44i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v22i32_to_v44i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4488,6 +5278,157 @@ define inreg <44 x i16> @bitcast_v22i32_to_v44i16_scalar(<22 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v44i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s62, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s62, -1
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s26, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s27, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s28, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s29, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s8
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s15 :: v_dual_mov_b32 v15, s14
+; GFX13-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v17, s12
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5530,6 +6471,204 @@ define <22 x i32> @bitcast_v44i16_to_v22i32(<44 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44i16_to_v22i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44i16_to_v22i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6405,6 +7544,116 @@ define inreg <22 x i32> @bitcast_v44i16_to_v22i32_scalar(<44 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44i16_to_v22i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7123,6 +8372,204 @@ define <44 x half> @bitcast_v22i32_to_v44f16(<22 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v22i32_to_v44f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v22i32_to_v44f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7855,6 +9302,157 @@ define inreg <44 x half> @bitcast_v22i32_to_v44f16_scalar(<22 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22i32_to_v44f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s62, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s62, -1
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s26, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s27, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s28, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s29, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s8
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s15 :: v_dual_mov_b32 v15, s14
+; GFX13-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v17, s12
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8996,6 +10594,204 @@ define <22 x i32> @bitcast_v44f16_to_v22i32(<44 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44f16_to_v22i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44f16_to_v22i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9941,6 +11737,116 @@ define inreg <22 x i32> @bitcast_v44f16_to_v22i32_scalar(<44 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44f16_to_v22i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10088,6 +11994,35 @@ define <11 x i64> @bitcast_v22f32_to_v11i64(<22 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v11i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10605,6 +12540,67 @@ define inreg <11 x i64> @bitcast_v22f32_to_v11i64_scalar(<22 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v11i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10769,6 +12765,52 @@ define <22 x float> @bitcast_v11i64_to_v22f32(<11 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v22f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11059,6 +13101,56 @@ define inreg <22 x float> @bitcast_v11i64_to_v22f32_scalar(<11 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v22f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s6 :: v_dual_mov_b32 v19, s7
+; GFX13-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v21, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11206,6 +13298,35 @@ define <11 x double> @bitcast_v22f32_to_v11f64(<22 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v11f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11723,6 +13844,67 @@ define inreg <11 x double> @bitcast_v22f32_to_v11f64_scalar(<22 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v11f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11837,6 +14019,35 @@ define <22 x float> @bitcast_v11f64_to_v22f32(<11 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f64_to_v22f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12310,6 +14521,111 @@ define inreg <22 x float> @bitcast_v11f64_to_v22f32_scalar(<11 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f64_to_v22f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13006,6 +15322,204 @@ define <44 x i16> @bitcast_v22f32_to_v44i16(<22 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v22f32_to_v44i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v22f32_to_v44i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14004,6 +16518,157 @@ define inreg <44 x i16> @bitcast_v22f32_to_v44i16_scalar(<22 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v20, v23, 16, v27
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v28
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v44i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s62, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s62, -1
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s26, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s27, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s28, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s29, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s8
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s15 :: v_dual_mov_b32 v15, s14
+; GFX13-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v17, s12
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15046,6 +17711,204 @@ define <22 x float> @bitcast_v44i16_to_v22f32(<44 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44i16_to_v22f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44i16_to_v22f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15921,6 +18784,116 @@ define inreg <22 x float> @bitcast_v44i16_to_v22f32_scalar(<44 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44i16_to_v22f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16617,6 +19590,204 @@ define <44 x half> @bitcast_v22f32_to_v44f16(<22 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v22f32_to_v44f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v22f32_to_v44f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17615,6 +20786,157 @@ define inreg <44 x half> @bitcast_v22f32_to_v44f16_scalar(<22 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v20, v23, 16, v27
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v28
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v22f32_to_v44f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s4, v3
+; GFX13-NEXT: v_readfirstlane_b32 s5, v2
+; GFX13-NEXT: v_readfirstlane_b32 s6, v1
+; GFX13-NEXT: v_readfirstlane_b32 s7, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s62, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s62, -1
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s8, s4, 16
+; GFX13-NEXT: s_lshr_b32 s9, s5, 16
+; GFX13-NEXT: s_lshr_b32 s10, s6, 16
+; GFX13-NEXT: s_lshr_b32 s11, s7, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s26, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s27, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s28, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s29, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s8
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s15 :: v_dual_mov_b32 v15, s14
+; GFX13-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v17, s12
+; GFX13-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
+; GFX13-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18756,6 +22078,204 @@ define <22 x float> @bitcast_v44f16_to_v22f32(<44 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44f16_to_v22f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44f16_to_v22f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19701,6 +23221,116 @@ define inreg <22 x float> @bitcast_v44f16_to_v22f32_scalar(<44 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44f16_to_v22f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19865,6 +23495,52 @@ define <11 x double> @bitcast_v11i64_to_v11f64(<11 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v11f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20154,6 +23830,55 @@ define inreg <11 x double> @bitcast_v11i64_to_v11f64_scalar(<11 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v11f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s8, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s8, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s6 :: v_dual_mov_b32 v19, s7
+; GFX13-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v21, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20268,6 +23993,35 @@ define <11 x i64> @bitcast_v11f64_to_v11i64(<11 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f64_to_v11i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20741,6 +24495,111 @@ define inreg <11 x i64> @bitcast_v11f64_to_v11i64_scalar(<11 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11f64_to_v11i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21471,6 +25330,238 @@ define <44 x i16> @bitcast_v11i64_to_v44i16(<11 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v11i64_to_v44i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v11i64_to_v44i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22203,6 +26294,146 @@ define inreg <44 x i16> @bitcast_v11i64_to_v44i16_scalar(<11 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v44i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s62, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-NEXT: s_lshr_b32 s9, s4, 16
+; GFX13-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-NEXT: s_lshr_b32 s11, s6, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s62, -1
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-NEXT: s_lshr_b32 s9, s4, 16
+; GFX13-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-NEXT: s_lshr_b32 s11, s6, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s26, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s27, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s28, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s29, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s8
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s15 :: v_dual_mov_b32 v15, s14
+; GFX13-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v17, s12
+; GFX13-NEXT: v_dual_mov_b32 v18, s6 :: v_dual_mov_b32 v19, s7
+; GFX13-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v21, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23245,6 +27476,204 @@ define <11 x i64> @bitcast_v44i16_to_v11i64(<44 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44i16_to_v11i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44i16_to_v11i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24120,6 +28549,116 @@ define inreg <11 x i64> @bitcast_v44i16_to_v11i64_scalar(<44 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44i16_to_v11i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24850,6 +29389,238 @@ define <44 x half> @bitcast_v11i64_to_v44f16(<11 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v11i64_to_v44f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v11i64_to_v44f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25582,6 +30353,146 @@ define inreg <44 x half> @bitcast_v11i64_to_v44f16_scalar(<11 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v19, s6
; GFX11-NEXT: v_dual_mov_b32 v20, s5 :: v_dual_mov_b32 v21, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v11i64_to_v44f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-NEXT: s_mov_b32 s62, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-NEXT: s_lshr_b32 s9, s4, 16
+; GFX13-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-NEXT: s_lshr_b32 s11, s6, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s62, -1
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-NEXT: s_lshr_b32 s9, s4, 16
+; GFX13-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-NEXT: s_lshr_b32 s11, s6, 16
+; GFX13-NEXT: s_lshr_b32 s12, s29, 16
+; GFX13-NEXT: s_lshr_b32 s13, s28, 16
+; GFX13-NEXT: s_lshr_b32 s14, s27, 16
+; GFX13-NEXT: s_lshr_b32 s15, s26, 16
+; GFX13-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-NEXT: s_lshr_b32 s41, s24, 16
+; GFX13-NEXT: s_lshr_b32 s42, s23, 16
+; GFX13-NEXT: s_lshr_b32 s43, s22, 16
+; GFX13-NEXT: s_lshr_b32 s44, s21, 16
+; GFX13-NEXT: s_lshr_b32 s45, s20, 16
+; GFX13-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-NEXT: s_lshr_b32 s47, s18, 16
+; GFX13-NEXT: s_lshr_b32 s56, s17, 16
+; GFX13-NEXT: s_lshr_b32 s57, s16, 16
+; GFX13-NEXT: s_lshr_b32 s58, s3, 16
+; GFX13-NEXT: s_lshr_b32 s59, s2, 16
+; GFX13-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-NEXT: s_lshr_b32 s61, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s26, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s27, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s28, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s29, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s8
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s15 :: v_dual_mov_b32 v15, s14
+; GFX13-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v17, s12
+; GFX13-NEXT: v_dual_mov_b32 v18, s6 :: v_dual_mov_b32 v19, s7
+; GFX13-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v21, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26723,6 +31634,204 @@ define <11 x i64> @bitcast_v44f16_to_v11i64(<44 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44f16_to_v11i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44f16_to_v11i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27668,6 +32777,116 @@ define inreg <11 x i64> @bitcast_v44f16_to_v11i64_scalar(<44 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44f16_to_v11i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28331,6 +33550,204 @@ define <44 x i16> @bitcast_v11f64_to_v44i16(<11 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v11f64_to_v44i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v11f64_to_v44i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29274,6 +34691,311 @@ define inreg <44 x i16> @bitcast_v11f64_to_v44i16_scalar(<11 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v20, v25, 16, v22
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v21, v27, 16, v23
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v11f64_to_v44i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s10, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s10, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v21 :: v_dual_lshrrev_b32 v22, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v19 :: v_dual_lshrrev_b32 v23, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v17 :: v_dual_lshrrev_b32 v25, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v15 :: v_dual_lshrrev_b32 v27, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v29, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v11 :: v_dual_lshrrev_b32 v31, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v9 :: v_dual_lshrrev_b32 v33, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v7 :: v_dual_lshrrev_b32 v35, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v5 :: v_dual_lshrrev_b32 v37, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v3 :: v_dual_lshrrev_b32 v39, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v49, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s7 :: v_dual_mov_b32 v21, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v49, s62 :: v_dual_mov_b32 v39, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s60 :: v_dual_mov_b32 v35, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s58 :: v_dual_mov_b32 v31, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s56 :: v_dual_mov_b32 v27, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s46 :: v_dual_mov_b32 v23, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s44 :: v_dual_mov_b32 v51, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s42 :: v_dual_mov_b32 v48, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s40 :: v_dual_mov_b32 v36, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s14 :: v_dual_mov_b32 v32, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s12 :: v_dual_mov_b32 v28, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v24, s8
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v11f64_to_v44i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s10, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s10, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[12:13], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[14:15], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[7:8], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[9:10], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[4:5], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v18 :: v_dual_lshrrev_b32 v25, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v20 :: v_dual_lshrrev_b32 v26, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v22 :: v_dual_lshrrev_b32 v16, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v30, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v31, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v11, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v24 :: v_dual_lshrrev_b32 v6, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v49, 16, v4
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s16 :: v_dual_mov_b32 v23, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s20 :: v_dual_mov_b32 v7, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, s24 :: v_dual_mov_b32 v12, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s28 :: v_dual_mov_b32 v19, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s4 :: v_dual_mov_b32 v5, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v3, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s19 :: v_dual_mov_b32 v10, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, s23 :: v_dual_mov_b32 v15, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s27 :: v_dual_mov_b32 v22, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v18, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s62 :: v_dual_mov_b32 v39, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s60 :: v_dual_mov_b32 v6, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s58 :: v_dual_mov_b32 v11, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, s56 :: v_dual_mov_b32 v30, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, s46 :: v_dual_mov_b32 v26, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s44 :: v_dual_mov_b32 v51, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s42 :: v_dual_mov_b32 v48, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s40 :: v_dual_mov_b32 v36, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s14 :: v_dual_mov_b32 v33, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s12 :: v_dual_mov_b32 v29, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v6, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v49, 16, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v37, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v51, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v38, 16, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v34, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v36, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v31, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v30, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v16, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v39, 16, v52
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v50, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v48, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v35, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v33, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v32, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v29, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v26, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v28, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v25, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v27, 16, v23
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30316,6 +36038,204 @@ define <11 x double> @bitcast_v44i16_to_v11f64(<44 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44i16_to_v11f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44i16_to_v11f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31191,6 +37111,116 @@ define inreg <11 x double> @bitcast_v44i16_to_v11f64_scalar(<44 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44i16_to_v11f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31854,6 +37884,204 @@ define <44 x half> @bitcast_v11f64_to_v44f16(<11 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v11f64_to_v44f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr22_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v11f64_to_v44f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr23
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr22
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v22, 16, v21 :: v_dual_lshrrev_b32 v23, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v19 :: v_dual_lshrrev_b32 v25, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v17 :: v_dual_lshrrev_b32 v27, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v15 :: v_dual_lshrrev_b32 v29, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v13 :: v_dual_lshrrev_b32 v31, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v5 :: v_dual_lshrrev_b32 v39, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v49, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v51, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v51, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v49, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v48, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v39, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v38, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v32, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v31, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v30, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v29, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v28, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v27, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v26, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v25, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v24, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v23, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v22, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32797,6 +39025,311 @@ define inreg <44 x half> @bitcast_v11f64_to_v44f16_scalar(<11 x double> inreg %a
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v20, v25, 16, v22
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v21, v27, 16, v23
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v11f64_to_v44f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s10, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s10, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v21 :: v_dual_lshrrev_b32 v22, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v19 :: v_dual_lshrrev_b32 v23, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v17 :: v_dual_lshrrev_b32 v25, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v15 :: v_dual_lshrrev_b32 v27, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v29, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v11 :: v_dual_lshrrev_b32 v31, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v9 :: v_dual_lshrrev_b32 v33, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v7 :: v_dual_lshrrev_b32 v35, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v5 :: v_dual_lshrrev_b32 v37, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v3 :: v_dual_lshrrev_b32 v39, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v49, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s7 :: v_dual_mov_b32 v21, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v49, s62 :: v_dual_mov_b32 v39, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s60 :: v_dual_mov_b32 v35, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s58 :: v_dual_mov_b32 v31, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s56 :: v_dual_mov_b32 v27, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s46 :: v_dual_mov_b32 v23, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s44 :: v_dual_mov_b32 v51, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s42 :: v_dual_mov_b32 v48, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s40 :: v_dual_mov_b32 v36, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s14 :: v_dual_mov_b32 v32, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s12 :: v_dual_mov_b32 v28, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v24, s8
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v22.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v11f64_to_v44f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s8, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s10, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s10, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr8
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[12:13], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[14:15], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[7:8], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[9:10], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[4:5], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v18 :: v_dual_lshrrev_b32 v25, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v20 :: v_dual_lshrrev_b32 v26, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v22 :: v_dual_lshrrev_b32 v16, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v13 :: v_dual_lshrrev_b32 v30, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v31, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v11, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v24 :: v_dual_lshrrev_b32 v6, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v3 :: v_dual_lshrrev_b32 v38, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v1 :: v_dual_lshrrev_b32 v39, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v49, 16, v4
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s16 :: v_dual_mov_b32 v23, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s20 :: v_dual_mov_b32 v7, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, s24 :: v_dual_mov_b32 v12, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s28 :: v_dual_mov_b32 v19, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s4 :: v_dual_mov_b32 v5, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v3, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s19 :: v_dual_mov_b32 v10, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, s23 :: v_dual_mov_b32 v15, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s27 :: v_dual_mov_b32 v22, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v18, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s62 :: v_dual_mov_b32 v39, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s60 :: v_dual_mov_b32 v6, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s58 :: v_dual_mov_b32 v11, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v31, s56 :: v_dual_mov_b32 v30, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, s46 :: v_dual_mov_b32 v26, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s44 :: v_dual_mov_b32 v51, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s42 :: v_dual_mov_b32 v48, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s40 :: v_dual_mov_b32 v36, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s14 :: v_dual_mov_b32 v33, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s12 :: v_dual_mov_b32 v29, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s9 :: v_dual_mov_b32 v27, s8
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v6, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v49, 16, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v37, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v51, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v38, 16, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v34, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v36, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v11, 16, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v31, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v30, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v16, 16, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v39, 16, v52
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v50, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v48, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v35, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v33, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v32, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v29, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v26, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v28, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v25, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v27, 16, v23
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33938,6 +40471,204 @@ define <11 x double> @bitcast_v44f16_to_v11f64(<44 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44f16_to_v11f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v3 :: v_dual_lshrrev_b32 v50, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr23_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44f16_to_v11f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v21 :: v_dual_lshrrev_b32 v24, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v19 :: v_dual_lshrrev_b32 v26, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v17 :: v_dual_lshrrev_b32 v28, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v15 :: v_dual_lshrrev_b32 v30, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v13 :: v_dual_lshrrev_b32 v32, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v11 :: v_dual_lshrrev_b32 v34, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v9 :: v_dual_lshrrev_b32 v36, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v7 :: v_dual_lshrrev_b32 v38, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v22
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v49, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v50, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v51, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v48, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v39, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v38, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v37, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v36, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v35, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v34, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v33, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v32, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v31, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v30, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v29, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v28, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v27, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v26, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v25, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v24, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v23, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34883,6 +41614,116 @@ define inreg <11 x double> @bitcast_v44f16_to_v11f64_scalar(<44 x half> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v44f16_to_v11f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s57, v1
+; GFX13-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-NEXT: v_readfirstlane_b32 s60, v4
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s62, s57, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s60, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s57, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35952,6 +42793,222 @@ define <44 x half> @bitcast_v44i16_to_v44f16(<44 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v51, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v52, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44i16_to_v44f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v21 :: v_dual_lshrrev_b32 v51, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v5 :: v_dual_lshrrev_b32 v23, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v3 :: v_dual_lshrrev_b32 v25, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v1 :: v_dual_lshrrev_b32 v27, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v0 :: v_dual_lshrrev_b32 v26, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v2 :: v_dual_lshrrev_b32 v24, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v4 :: v_dual_lshrrev_b32 v28, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v18 :: v_dual_lshrrev_b32 v50, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v20 :: v_dual_lshrrev_b32 v52, 16, v21
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44i16_to_v44f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v21 :: v_dual_lshrrev_b32 v51, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v5 :: v_dual_lshrrev_b32 v27, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v3 :: v_dual_lshrrev_b32 v25, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v1 :: v_dual_lshrrev_b32 v23, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v52, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v51, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v50, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v48, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v38, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v36, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v34, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v32, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v30, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v28, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v23, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v24, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v25, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v26, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v27, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v0 :: v_dual_lshrrev_b32 v24, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v2 :: v_dual_lshrrev_b32 v26, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v4 :: v_dual_lshrrev_b32 v28, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v18 :: v_dual_lshrrev_b32 v50, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v20 :: v_dual_lshrrev_b32 v52, 16, v21
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v23, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v24, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v25, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v26, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v27, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v28, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v30, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v32, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v34, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v36, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v38, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v48, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v50, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v51, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v52, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37147,6 +44204,334 @@ define inreg <44 x half> @bitcast_v44i16_to_v44f16_scalar(<44 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v20, v23, 16, v27
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v28
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44i16_to_v44f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s61, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s60, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s59, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s58, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s62, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s62, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s62, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s61, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s60, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s59, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s58, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, s56, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v6 :: v_dual_lshrrev_b32 v36, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v10 :: v_dual_lshrrev_b32 v32, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v12 :: v_dual_lshrrev_b32 v30, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v16 :: v_dual_lshrrev_b32 v26, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v18 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v20 :: v_dual_lshrrev_b32 v22, 16, v21
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s61 :: v_dual_mov_b32 v20, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s59 :: v_dual_mov_b32 v18, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s57 :: v_dual_mov_b32 v23, s56
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s47 :: v_dual_mov_b32 v25, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s45 :: v_dual_mov_b32 v27, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s43 :: v_dual_mov_b32 v29, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s41 :: v_dual_mov_b32 v31, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s15 :: v_dual_mov_b32 v33, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s13 :: v_dual_mov_b32 v35, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s11 :: v_dual_mov_b32 v37, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s9 :: v_dual_mov_b32 v39, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s7 :: v_dual_mov_b32 v49, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s4 :: v_dual_mov_b32 v51, s5
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44i16_to_v44f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s61, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s60, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s59, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s58, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s62, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s62, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s62, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s61, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s60, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s59, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s58, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, s56, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, s46, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v6 :: v_dual_lshrrev_b32 v50, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v20 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v18 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s61 :: v_dual_mov_b32 v18, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s59 :: v_dual_mov_b32 v20, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s29 :: v_dual_mov_b32 v12, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s25 :: v_dual_mov_b32 v16, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s23 :: v_dual_mov_b32 v8, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v10, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s19 :: v_dual_mov_b32 v2, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s3 :: v_dual_mov_b32 v1, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s1 :: v_dual_mov_b32 v6, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s57 :: v_dual_mov_b32 v23, s56
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s47 :: v_dual_mov_b32 v25, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s45 :: v_dual_mov_b32 v27, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s43 :: v_dual_mov_b32 v29, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s41 :: v_dual_mov_b32 v31, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s15 :: v_dual_mov_b32 v33, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s13 :: v_dual_mov_b32 v35, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s11 :: v_dual_mov_b32 v37, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s9 :: v_dual_mov_b32 v39, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s7 :: v_dual_mov_b32 v49, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s4 :: v_dual_mov_b32 v51, s5
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v51, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v50, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v38, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v37, 16, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v36, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v35, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v33, 16, v37
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v32, 16, v38
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v31, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v30, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v28, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v27, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v49, 16, v52
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v48, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v34, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v29, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v26, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v25, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v23, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v28
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37949,6 +45334,222 @@ define <44 x i16> @bitcast_v44f16_to_v44i16(<44 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v20, v51, v20, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v21, v52, v21, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44f16_to_v44i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v21 :: v_dual_lshrrev_b32 v51, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v5 :: v_dual_lshrrev_b32 v23, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v3 :: v_dual_lshrrev_b32 v25, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v1 :: v_dual_lshrrev_b32 v27, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v23.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v0 :: v_dual_lshrrev_b32 v26, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v2 :: v_dual_lshrrev_b32 v24, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v4 :: v_dual_lshrrev_b32 v28, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v18 :: v_dual_lshrrev_b32 v50, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v20 :: v_dual_lshrrev_b32 v52, 16, v21
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v52.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44f16_to_v44i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v21 :: v_dual_lshrrev_b32 v51, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v11 :: v_dual_lshrrev_b32 v33, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v9 :: v_dual_lshrrev_b32 v31, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v7 :: v_dual_lshrrev_b32 v29, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v5 :: v_dual_lshrrev_b32 v27, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v3 :: v_dual_lshrrev_b32 v25, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v1 :: v_dual_lshrrev_b32 v23, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v22
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v52, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v51, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v50, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v48, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v38, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v36, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v34, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v32, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v30, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v28, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v23, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v24, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v25, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v26, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v27, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v0 :: v_dual_lshrrev_b32 v24, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v2 :: v_dual_lshrrev_b32 v26, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v4 :: v_dual_lshrrev_b32 v28, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v6 :: v_dual_lshrrev_b32 v30, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v18 :: v_dual_lshrrev_b32 v50, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v20 :: v_dual_lshrrev_b32 v52, 16, v21
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v23, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v24, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v25, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v26, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v27, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v28, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v29, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v30, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v31, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v32, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v33, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v34, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v36, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v38, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v48, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v50, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v51, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v52, v21, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -39091,6 +46692,334 @@ define inreg <44 x i16> @bitcast_v44f16_to_v44i16_scalar(<44 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v20, v23, 16, v27
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v28
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v44f16_to_v44i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s59, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s61, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s60, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s59, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s58, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s62, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s62, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s62, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s61, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s60, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s59, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s58, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v0 :: v_dual_lshrrev_b32 v50, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v2 :: v_dual_lshrrev_b32 v48, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v6 :: v_dual_lshrrev_b32 v36, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v10 :: v_dual_lshrrev_b32 v32, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v12 :: v_dual_lshrrev_b32 v30, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v16 :: v_dual_lshrrev_b32 v26, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v18 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v23, 16, v20 :: v_dual_lshrrev_b32 v22, 16, v21
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s61 :: v_dual_mov_b32 v20, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s59 :: v_dual_mov_b32 v18, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v22, s57 :: v_dual_mov_b32 v23, s56
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s47 :: v_dual_mov_b32 v25, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s45 :: v_dual_mov_b32 v27, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s43 :: v_dual_mov_b32 v29, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s41 :: v_dual_mov_b32 v31, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s15 :: v_dual_mov_b32 v33, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s13 :: v_dual_mov_b32 v35, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s11 :: v_dual_mov_b32 v37, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s9 :: v_dual_mov_b32 v39, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s7 :: v_dual_mov_b32 v49, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s4 :: v_dual_mov_b32 v51, s5
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v50.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v23.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v22.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v44f16_to_v44i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s59, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s58, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s61, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s60, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s59, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s58, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s62, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s62, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s62, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s62, s62, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s62, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s62, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s61, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s60, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s59, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s58, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v6 :: v_dual_lshrrev_b32 v50, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v1 :: v_dual_lshrrev_b32 v48, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v2 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v12 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v20 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v23, 16, v18 :: v_dual_lshrrev_b32 v22, 16, v17
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s61 :: v_dual_mov_b32 v18, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s59 :: v_dual_mov_b32 v20, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s29 :: v_dual_mov_b32 v12, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s25 :: v_dual_mov_b32 v16, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s23 :: v_dual_mov_b32 v8, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v10, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s19 :: v_dual_mov_b32 v2, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s3 :: v_dual_mov_b32 v1, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s1 :: v_dual_mov_b32 v6, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s57 :: v_dual_mov_b32 v23, s56
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s47 :: v_dual_mov_b32 v25, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s45 :: v_dual_mov_b32 v27, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s43 :: v_dual_mov_b32 v29, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s41 :: v_dual_mov_b32 v31, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s15 :: v_dual_mov_b32 v33, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s13 :: v_dual_mov_b32 v35, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s11 :: v_dual_mov_b32 v37, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s9 :: v_dual_mov_b32 v39, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s7 :: v_dual_mov_b32 v49, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s4 :: v_dual_mov_b32 v51, s5
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v51, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v50, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v38, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v37, 16, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v36, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v35, 16, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v33, 16, v37
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v32, 16, v38
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v31, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v30, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v28, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v27, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v49, 16, v52
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v48, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v39, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v34, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v29, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v26, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v25, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v24, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v23, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v22, 16, v28
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.768bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.768bit.ll
index d7b8411c8f146..50d837a2304ce 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.768bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.768bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <24 x float> @bitcast_v24i32_to_v24f32(<24 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v24i32_to_v24f32:
@@ -155,6 +157,36 @@ define <24 x float> @bitcast_v24i32_to_v24f32(<24 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v24f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -468,6 +500,72 @@ define inreg <24 x float> @bitcast_v24i32_to_v24f32_scalar(<24 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v24f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -622,6 +720,36 @@ define <24 x i32> @bitcast_v24f32_to_v24i32(<24 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v24i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1155,6 +1283,72 @@ define inreg <24 x i32> @bitcast_v24f32_to_v24i32_scalar(<24 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v24i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1321,6 +1515,36 @@ define <12 x i64> @bitcast_v24i32_to_v12i64(<24 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v12i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1634,6 +1858,72 @@ define inreg <12 x i64> @bitcast_v24i32_to_v12i64_scalar(<24 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v12i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1806,6 +2096,54 @@ define <24 x i32> @bitcast_v12i64_to_v24i32(<12 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v24i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2119,6 +2457,60 @@ define inreg <24 x i32> @bitcast_v12i64_to_v24i32_scalar(<12 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v24i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-NEXT: v_readfirstlane_b32 s4, v4
+; GFX13-NEXT: v_readfirstlane_b32 s7, v3
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s8 :: v_dual_mov_b32 v19, s9
+; GFX13-NEXT: v_dual_mov_b32 v20, s6 :: v_dual_mov_b32 v21, s7
+; GFX13-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v23, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2285,6 +2677,36 @@ define <12 x double> @bitcast_v24i32_to_v12f64(<24 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v12f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2598,6 +3020,72 @@ define inreg <12 x double> @bitcast_v24i32_to_v12f64_scalar(<24 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v12f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2716,6 +3204,36 @@ define <24 x i32> @bitcast_v12f64_to_v24i32(<12 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f64_to_v24i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3201,6 +3719,114 @@ define inreg <24 x i32> @bitcast_v12f64_to_v24i32_scalar(<12 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f64_to_v24i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3975,6 +4601,218 @@ define <48 x i16> @bitcast_v24i32_to_v48i16(<24 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v24i32_to_v48i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v24i32_to_v48i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4782,6 +5620,170 @@ define inreg <48 x i16> @bitcast_v24i32_to_v48i16_scalar(<24 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v48i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s74, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s74, -1
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s10
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5931,6 +6933,218 @@ define <24 x i32> @bitcast_v48i16_to_v24i32(<48 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48i16_to_v24i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48i16_to_v24i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6882,6 +8096,124 @@ define inreg <24 x i32> @bitcast_v48i16_to_v24i32_scalar(<48 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48i16_to_v24i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7656,6 +8988,218 @@ define <48 x half> @bitcast_v24i32_to_v48f16(<24 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v24i32_to_v48f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v24i32_to_v48f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8463,6 +10007,170 @@ define inreg <48 x half> @bitcast_v24i32_to_v48f16_scalar(<24 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24i32_to_v48f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s74, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s74, -1
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s10
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9724,6 +11432,218 @@ define <24 x i32> @bitcast_v48f16_to_v24i32(<48 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48f16_to_v24i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48f16_to_v24i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10745,6 +12665,124 @@ define inreg <24 x i32> @bitcast_v48f16_to_v24i32_scalar(<48 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48f16_to_v24i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10899,6 +12937,36 @@ define <12 x i64> @bitcast_v24f32_to_v12i64(<24 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v12i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11432,6 +13500,72 @@ define inreg <12 x i64> @bitcast_v24f32_to_v12i64_scalar(<24 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v12i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11604,6 +13738,54 @@ define <24 x float> @bitcast_v12i64_to_v24f32(<12 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v24f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11917,6 +14099,60 @@ define inreg <24 x float> @bitcast_v12i64_to_v24f32_scalar(<12 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v24f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-NEXT: v_readfirstlane_b32 s4, v4
+; GFX13-NEXT: v_readfirstlane_b32 s7, v3
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s8 :: v_dual_mov_b32 v19, s9
+; GFX13-NEXT: v_dual_mov_b32 v20, s6 :: v_dual_mov_b32 v21, s7
+; GFX13-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v23, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12071,6 +14307,36 @@ define <12 x double> @bitcast_v24f32_to_v12f64(<24 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v12f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12604,6 +14870,72 @@ define inreg <12 x double> @bitcast_v24f32_to_v12f64_scalar(<24 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v12f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12722,6 +15054,36 @@ define <24 x float> @bitcast_v12f64_to_v24f32(<12 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f64_to_v24f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13207,6 +15569,114 @@ define inreg <24 x float> @bitcast_v12f64_to_v24f32_scalar(<12 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f64_to_v24f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13957,6 +16427,218 @@ define <48 x i16> @bitcast_v24f32_to_v48i16(<24 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v24f32_to_v48i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v24f32_to_v48i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15053,6 +17735,170 @@ define inreg <48 x i16> @bitcast_v24f32_to_v48i16_scalar(<24 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v29
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v30
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v48i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s74, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s74, -1
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s10
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16202,6 +19048,218 @@ define <24 x float> @bitcast_v48i16_to_v24f32(<48 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48i16_to_v24f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48i16_to_v24f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17153,6 +20211,124 @@ define inreg <24 x float> @bitcast_v48i16_to_v24f32_scalar(<48 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48i16_to_v24f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17903,6 +21079,218 @@ define <48 x half> @bitcast_v24f32_to_v48f16(<24 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v24f32_to_v48f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v24f32_to_v48f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18999,6 +22387,170 @@ define inreg <48 x half> @bitcast_v24f32_to_v48f16_scalar(<24 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v29
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v30
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v24f32_to_v48f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s4, v5
+; GFX13-NEXT: v_readfirstlane_b32 s5, v4
+; GFX13-NEXT: v_readfirstlane_b32 s6, v3
+; GFX13-NEXT: v_readfirstlane_b32 s7, v2
+; GFX13-NEXT: v_readfirstlane_b32 s8, v1
+; GFX13-NEXT: v_readfirstlane_b32 s9, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s74, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s74, -1
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s10, s4, 16
+; GFX13-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-NEXT: s_lshr_b32 s12, s6, 16
+; GFX13-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-NEXT: s_lshr_b32 s14, s8, 16
+; GFX13-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s10
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s9 :: v_dual_mov_b32 v19, s8
+; GFX13-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
+; GFX13-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20260,6 +23812,218 @@ define <24 x float> @bitcast_v48f16_to_v24f32(<48 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48f16_to_v24f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48f16_to_v24f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21281,6 +25045,124 @@ define inreg <24 x float> @bitcast_v48f16_to_v24f32_scalar(<48 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48f16_to_v24f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21453,6 +25335,54 @@ define <12 x double> @bitcast_v12i64_to_v12f64(<12 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v12f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21765,6 +25695,59 @@ define inreg <12 x double> @bitcast_v12i64_to_v12f64_scalar(<12 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v12f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-NEXT: v_readfirstlane_b32 s4, v4
+; GFX13-NEXT: v_readfirstlane_b32 s7, v3
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s10, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s10, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s10, s10, exec_lo
+; GFX13-NEXT: s_cselect_b32 s10, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s8 :: v_dual_mov_b32 v19, s9
+; GFX13-NEXT: v_dual_mov_b32 v20, s6 :: v_dual_mov_b32 v21, s7
+; GFX13-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v23, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21883,6 +25866,36 @@ define <12 x i64> @bitcast_v12f64_to_v12i64(<12 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f64_to_v12i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22368,6 +26381,114 @@ define inreg <12 x i64> @bitcast_v12f64_to_v12i64_scalar(<12 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12f64_to_v12i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23154,6 +27275,254 @@ define <48 x i16> @bitcast_v12i64_to_v48i16(<12 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i64_to_v48i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i64_to_v48i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23961,6 +28330,158 @@ define inreg <48 x i16> @bitcast_v12i64_to_v48i16_scalar(<12 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v48i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-NEXT: v_readfirstlane_b32 s4, v4
+; GFX13-NEXT: v_readfirstlane_b32 s7, v3
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s74, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s10, s5, 16
+; GFX13-NEXT: s_lshr_b32 s11, s4, 16
+; GFX13-NEXT: s_lshr_b32 s12, s7, 16
+; GFX13-NEXT: s_lshr_b32 s13, s6, 16
+; GFX13-NEXT: s_lshr_b32 s14, s9, 16
+; GFX13-NEXT: s_lshr_b32 s15, s8, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s74, -1
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s10, s5, 16
+; GFX13-NEXT: s_lshr_b32 s11, s4, 16
+; GFX13-NEXT: s_lshr_b32 s12, s7, 16
+; GFX13-NEXT: s_lshr_b32 s13, s6, 16
+; GFX13-NEXT: s_lshr_b32 s14, s9, 16
+; GFX13-NEXT: s_lshr_b32 s15, s8, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s10
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s8 :: v_dual_mov_b32 v19, s9
+; GFX13-NEXT: v_dual_mov_b32 v20, s6 :: v_dual_mov_b32 v21, s7
+; GFX13-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v23, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25110,6 +29631,218 @@ define <12 x i64> @bitcast_v48i16_to_v12i64(<48 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48i16_to_v12i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48i16_to_v12i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26061,6 +30794,124 @@ define inreg <12 x i64> @bitcast_v48i16_to_v12i64_scalar(<48 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48i16_to_v12i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26847,6 +31698,254 @@ define <48 x half> @bitcast_v12i64_to_v48f16(<12 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i64_to_v48f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i64_to_v48f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27654,6 +32753,158 @@ define inreg <48 x half> @bitcast_v12i64_to_v48f16_scalar(<12 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v20, s7 :: v_dual_mov_b32 v21, s6
; GFX11-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v23, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i64_to_v48f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-NEXT: v_readfirstlane_b32 s5, v5
+; GFX13-NEXT: v_readfirstlane_b32 s4, v4
+; GFX13-NEXT: v_readfirstlane_b32 s7, v3
+; GFX13-NEXT: v_readfirstlane_b32 s6, v2
+; GFX13-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-NEXT: s_mov_b32 s74, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s10, s5, 16
+; GFX13-NEXT: s_lshr_b32 s11, s4, 16
+; GFX13-NEXT: s_lshr_b32 s12, s7, 16
+; GFX13-NEXT: s_lshr_b32 s13, s6, 16
+; GFX13-NEXT: s_lshr_b32 s14, s9, 16
+; GFX13-NEXT: s_lshr_b32 s15, s8, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s74, -1
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s10, s5, 16
+; GFX13-NEXT: s_lshr_b32 s11, s4, 16
+; GFX13-NEXT: s_lshr_b32 s12, s7, 16
+; GFX13-NEXT: s_lshr_b32 s13, s6, 16
+; GFX13-NEXT: s_lshr_b32 s14, s9, 16
+; GFX13-NEXT: s_lshr_b32 s15, s8, 16
+; GFX13-NEXT: s_lshr_b32 s40, s29, 16
+; GFX13-NEXT: s_lshr_b32 s41, s28, 16
+; GFX13-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-NEXT: s_lshr_b32 s43, s26, 16
+; GFX13-NEXT: s_lshr_b32 s44, s25, 16
+; GFX13-NEXT: s_lshr_b32 s45, s24, 16
+; GFX13-NEXT: s_lshr_b32 s46, s23, 16
+; GFX13-NEXT: s_lshr_b32 s47, s22, 16
+; GFX13-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-NEXT: s_lshr_b32 s57, s20, 16
+; GFX13-NEXT: s_lshr_b32 s58, s19, 16
+; GFX13-NEXT: s_lshr_b32 s59, s18, 16
+; GFX13-NEXT: s_lshr_b32 s60, s17, 16
+; GFX13-NEXT: s_lshr_b32 s61, s16, 16
+; GFX13-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-NEXT: s_lshr_b32 s63, s2, 16
+; GFX13-NEXT: s_lshr_b32 s72, s1, 16
+; GFX13-NEXT: s_lshr_b32 s73, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s10
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s8 :: v_dual_mov_b32 v19, s9
+; GFX13-NEXT: v_dual_mov_b32 v20, s6 :: v_dual_mov_b32 v21, s7
+; GFX13-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v23, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28915,6 +34166,218 @@ define <12 x i64> @bitcast_v48f16_to_v12i64(<48 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48f16_to_v12i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48f16_to_v12i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29936,6 +35399,124 @@ define inreg <12 x i64> @bitcast_v48f16_to_v12i64_scalar(<48 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48f16_to_v12i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30650,6 +36231,218 @@ define <48 x i16> @bitcast_v12f64_to_v48i16(<12 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12f64_to_v48i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12f64_to_v48i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31686,6 +37479,337 @@ define inreg <48 x i16> @bitcast_v12f64_to_v48i16_scalar(<12 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v22, v27, 16, v24
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v23, v29, 16, v25
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12f64_to_v48i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s12, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s12, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v23 :: v_dual_lshrrev_b32 v24, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v21 :: v_dual_lshrrev_b32 v25, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v19 :: v_dual_lshrrev_b32 v27, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v17 :: v_dual_lshrrev_b32 v29, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v31, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v13 :: v_dual_lshrrev_b32 v33, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v11 :: v_dual_lshrrev_b32 v35, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v9 :: v_dual_lshrrev_b32 v37, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v7 :: v_dual_lshrrev_b32 v39, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v5 :: v_dual_lshrrev_b32 v49, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v3 :: v_dual_lshrrev_b32 v51, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v53, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v3, s3
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v7, s19
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v11, s23
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v15, s27
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v19, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s5 :: v_dual_mov_b32 v23, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v53, s74 :: v_dual_mov_b32 v51, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v49, s72 :: v_dual_mov_b32 v39, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s62 :: v_dual_mov_b32 v35, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s60 :: v_dual_mov_b32 v31, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s58 :: v_dual_mov_b32 v27, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s56 :: v_dual_mov_b32 v24, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v55, s46 :: v_dual_mov_b32 v54, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s44 :: v_dual_mov_b32 v50, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s42 :: v_dual_mov_b32 v38, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s40 :: v_dual_mov_b32 v34, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s14 :: v_dual_mov_b32 v30, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v26, s10
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12f64_to_v48i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s12, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s12, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[14:15], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[16:17], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[9:10], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[11:12], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[4:5], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[6:7], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v20 :: v_dual_lshrrev_b32 v27, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v22 :: v_dual_lshrrev_b32 v28, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v24 :: v_dual_lshrrev_b32 v18, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v32, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v33, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v13, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v26 :: v_dual_lshrrev_b32 v8, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s16 :: v_dual_mov_b32 v4, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s20 :: v_dual_mov_b32 v11, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s24 :: v_dual_mov_b32 v16, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, s28 :: v_dual_mov_b32 v23, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s4 :: v_dual_mov_b32 v19, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v1, s3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s17 :: v_dual_mov_b32 v5, s19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s21 :: v_dual_mov_b32 v12, s23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s25 :: v_dual_mov_b32 v17, s27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s29 :: v_dual_mov_b32 v24, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v20, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, s74 :: v_dual_mov_b32 v52, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s72 :: v_dual_mov_b32 v48, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, s62 :: v_dual_mov_b32 v36, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s60 :: v_dual_mov_b32 v33, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s58 :: v_dual_mov_b32 v18, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s56 :: v_dual_mov_b32 v27, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, s46 :: v_dual_mov_b32 v54, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v51, s44 :: v_dual_mov_b32 v50, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, s42 :: v_dual_mov_b32 v38, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s40 :: v_dual_mov_b32 v35, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s14 :: v_dual_mov_b32 v31, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s11 :: v_dual_mov_b32 v29, s10
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v8, 16, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v53, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v52, 16, v64
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v39, 16, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v49, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v48, 16, v52
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v36, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v38, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v13, 16, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v33, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v32, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v18, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v55, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v54, 16, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v51, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v50, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v37, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v35, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v34, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v31, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v28, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v30, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v27, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v29, 16, v25
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32835,6 +38959,218 @@ define <12 x double> @bitcast_v48i16_to_v12f64(<48 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48i16_to_v12f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48i16_to_v12f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33786,6 +40122,124 @@ define inreg <12 x double> @bitcast_v48i16_to_v12f64_scalar(<48 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48i16_to_v12f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34500,6 +40954,218 @@ define <48 x half> @bitcast_v12f64_to_v48f16(<12 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12f64_to_v48f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr24_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12f64_to_v48f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr25
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr24
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v24, 16, v23 :: v_dual_lshrrev_b32 v25, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v21 :: v_dual_lshrrev_b32 v27, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v19 :: v_dual_lshrrev_b32 v29, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v17 :: v_dual_lshrrev_b32 v31, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v15 :: v_dual_lshrrev_b32 v33, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v13 :: v_dual_lshrrev_b32 v35, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v51, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v55, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v55, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v53, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v52, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v51, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v50, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v49, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v48, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v35, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v34, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v33, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v32, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v31, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v30, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v29, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v28, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v27, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v26, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v25, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v24, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35536,6 +42202,337 @@ define inreg <48 x half> @bitcast_v12f64_to_v48f16_scalar(<12 x double> inreg %a
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v22, v27, 16, v24
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v23, v29, 16, v25
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12f64_to_v48f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s12, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s12, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v23 :: v_dual_lshrrev_b32 v24, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v21 :: v_dual_lshrrev_b32 v25, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v19 :: v_dual_lshrrev_b32 v27, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v17 :: v_dual_lshrrev_b32 v29, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v31, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v13 :: v_dual_lshrrev_b32 v33, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v11 :: v_dual_lshrrev_b32 v35, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v9 :: v_dual_lshrrev_b32 v37, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v7 :: v_dual_lshrrev_b32 v39, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v5 :: v_dual_lshrrev_b32 v49, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v3 :: v_dual_lshrrev_b32 v51, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v53, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v3, s3
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v7, s19
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v11, s23
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v15, s27
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v19, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s5 :: v_dual_mov_b32 v23, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v53, s74 :: v_dual_mov_b32 v51, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v49, s72 :: v_dual_mov_b32 v39, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s62 :: v_dual_mov_b32 v35, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s60 :: v_dual_mov_b32 v31, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s58 :: v_dual_mov_b32 v27, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s56 :: v_dual_mov_b32 v24, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v55, s46 :: v_dual_mov_b32 v54, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s44 :: v_dual_mov_b32 v50, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s42 :: v_dual_mov_b32 v38, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s40 :: v_dual_mov_b32 v34, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s14 :: v_dual_mov_b32 v30, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v26, s10
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v24.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12f64_to_v48f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s10, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s12, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s12, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr11
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr10
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[19:20], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[14:15], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[16:17], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[9:10], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[11:12], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[4:5], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[6:7], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v20 :: v_dual_lshrrev_b32 v27, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v22 :: v_dual_lshrrev_b32 v28, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v24 :: v_dual_lshrrev_b32 v18, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v15 :: v_dual_lshrrev_b32 v32, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v33, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v13, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v26 :: v_dual_lshrrev_b32 v8, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v5 :: v_dual_lshrrev_b32 v48, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v7 :: v_dual_lshrrev_b32 v49, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v3 :: v_dual_lshrrev_b32 v53, 16, v2
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s16 :: v_dual_mov_b32 v4, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s20 :: v_dual_mov_b32 v11, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s24 :: v_dual_mov_b32 v16, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, s28 :: v_dual_mov_b32 v23, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s4 :: v_dual_mov_b32 v19, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v1, s3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s17 :: v_dual_mov_b32 v5, s19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s21 :: v_dual_mov_b32 v12, s23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s25 :: v_dual_mov_b32 v17, s27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s29 :: v_dual_mov_b32 v24, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v20, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, s74 :: v_dual_mov_b32 v52, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s72 :: v_dual_mov_b32 v48, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, s62 :: v_dual_mov_b32 v36, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s60 :: v_dual_mov_b32 v33, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s58 :: v_dual_mov_b32 v18, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s56 :: v_dual_mov_b32 v27, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, s46 :: v_dual_mov_b32 v54, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v51, s44 :: v_dual_mov_b32 v50, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, s42 :: v_dual_mov_b32 v38, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s40 :: v_dual_mov_b32 v35, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s14 :: v_dual_mov_b32 v31, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s11 :: v_dual_mov_b32 v29, s10
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v8, 16, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v53, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v52, 16, v64
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v39, 16, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v49, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v48, 16, v52
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v36, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v38, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v13, 16, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v33, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v32, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v18, 16, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v55, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v54, 16, v65
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v51, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v50, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v37, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v35, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v34, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v31, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v28, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v30, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v27, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v29, 16, v25
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36797,6 +43794,218 @@ define <12 x double> @bitcast_v48f16_to_v12f64(<48 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48f16_to_v12f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr25_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48f16_to_v12f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v23 :: v_dual_lshrrev_b32 v26, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v21 :: v_dual_lshrrev_b32 v28, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v24
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v53, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v54, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v55, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v52, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v51, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v50, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v49, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v48, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v39, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v38, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v37, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v36, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v35, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v34, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v33, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v32, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v31, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v30, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v29, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v28, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v27, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v26, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v25, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37818,6 +45027,124 @@ define inreg <12 x double> @bitcast_v48f16_to_v12f64_scalar(<48 x half> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v48f16_to_v12f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v5
+; GFX13-NEXT: v_readfirstlane_b32 s46, v4
+; GFX13-NEXT: v_readfirstlane_b32 s58, v3
+; GFX13-NEXT: v_readfirstlane_b32 s60, v2
+; GFX13-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-NEXT: v_readfirstlane_b32 s72, v6
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s56, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s74, s61, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s72, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s61, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -39006,6 +46333,238 @@ define <48 x half> @bitcast_v48i16_to_v48f16(<48 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v55, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v64, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48i16_to_v48f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v23 :: v_dual_lshrrev_b32 v55, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v21 :: v_dual_lshrrev_b32 v53, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v19 :: v_dual_lshrrev_b32 v51, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v49, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v39, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v37, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v35, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v33, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v31, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v25, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v3 :: v_dual_lshrrev_b32 v27, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v1 :: v_dual_lshrrev_b32 v29, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v0 :: v_dual_lshrrev_b32 v28, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v2 :: v_dual_lshrrev_b32 v26, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v4 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v18 :: v_dual_lshrrev_b32 v52, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v20 :: v_dual_lshrrev_b32 v54, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v22 :: v_dual_lshrrev_b32 v64, 16, v23
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v64.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48i16_to_v48f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v23 :: v_dual_lshrrev_b32 v55, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v21 :: v_dual_lshrrev_b32 v53, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v19 :: v_dual_lshrrev_b32 v51, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v49, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v39, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v37, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v35, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v33, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v31, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v29, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v3 :: v_dual_lshrrev_b32 v27, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v1 :: v_dual_lshrrev_b32 v25, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v64, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v55, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v54, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v53, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v52, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v51, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v49, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v39, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v37, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v35, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v33, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v31, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v25, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v26, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v27, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v28, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v29, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v0 :: v_dual_lshrrev_b32 v26, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v2 :: v_dual_lshrrev_b32 v28, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v4 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v18 :: v_dual_lshrrev_b32 v52, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v20 :: v_dual_lshrrev_b32 v54, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v22 :: v_dual_lshrrev_b32 v64, 16, v23
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v25, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v26, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v27, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v28, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v29, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v31, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v33, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v35, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v37, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v39, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v49, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v51, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v52, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v53, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v54, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v55, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v64, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -40311,6 +47870,362 @@ define inreg <48 x half> @bitcast_v48i16_to_v48f16_scalar(<48 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v29
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v30
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48i16_to_v48f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v6
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s72, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s63, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s73, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s62, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s61, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s60, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s74, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s74, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s74, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s72, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s63, s47
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s73, s59
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s62, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s61, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s60, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s7, s16, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, s56, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v4 :: v_dual_lshrrev_b32 v50, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v6 :: v_dual_lshrrev_b32 v48, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v8 :: v_dual_lshrrev_b32 v38, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v12 :: v_dual_lshrrev_b32 v34, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v14 :: v_dual_lshrrev_b32 v32, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v18 :: v_dual_lshrrev_b32 v28, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v20 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v22 :: v_dual_lshrrev_b32 v24, 16, v23
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s72 :: v_dual_mov_b32 v22, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v20, s62
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s61 :: v_dual_mov_b32 v18, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s57 :: v_dual_mov_b32 v25, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s59 :: v_dual_mov_b32 v27, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s56 :: v_dual_mov_b32 v29, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s45 :: v_dual_mov_b32 v31, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s43 :: v_dual_mov_b32 v33, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s41 :: v_dual_mov_b32 v35, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s15 :: v_dual_mov_b32 v37, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s13 :: v_dual_mov_b32 v39, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s11 :: v_dual_mov_b32 v49, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s9 :: v_dual_mov_b32 v51, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s6 :: v_dual_mov_b32 v53, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s4 :: v_dual_mov_b32 v55, s5
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48i16_to_v48f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v6
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s72, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s63, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s73, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s62, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s61, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s60, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s74, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s74, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s74, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s72, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s63, s47
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s73, s59
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s62, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s61, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s60, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s7, s16, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, s56, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s46, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v6 :: v_dual_lshrrev_b32 v48, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v22 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v20 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s72 :: v_dual_mov_b32 v20, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v22, s62
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s61 :: v_dual_mov_b32 v14, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s27 :: v_dual_mov_b32 v18, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s25 :: v_dual_mov_b32 v10, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v12, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s21 :: v_dual_mov_b32 v4, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s17 :: v_dual_mov_b32 v8, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s3 :: v_dual_mov_b32 v1, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v3, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s57 :: v_dual_mov_b32 v25, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s59 :: v_dual_mov_b32 v27, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s56 :: v_dual_mov_b32 v29, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s45 :: v_dual_mov_b32 v31, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s43 :: v_dual_mov_b32 v33, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s41 :: v_dual_mov_b32 v35, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s15 :: v_dual_mov_b32 v37, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s13 :: v_dual_mov_b32 v39, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s11 :: v_dual_mov_b32 v49, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s9 :: v_dual_mov_b32 v51, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s6 :: v_dual_mov_b32 v53, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s4 :: v_dual_mov_b32 v55, s5
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v55, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v54, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v53, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v51, 16, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v50, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v48, 16, v52
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v39, 16, v53
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v39, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v38, 16, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v37, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v35, 16, v39
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v34, 16, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v33, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v32, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v30, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v29, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v49, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v36, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v31, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v28, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v27, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v26, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v30
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -41183,6 +49098,238 @@ define <48 x i16> @bitcast_v48f16_to_v48i16(<48 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v22, v55, v22, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v23, v64, v23, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48f16_to_v48i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v23 :: v_dual_lshrrev_b32 v55, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v21 :: v_dual_lshrrev_b32 v53, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v19 :: v_dual_lshrrev_b32 v51, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v49, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v39, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v37, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v35, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v33, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v31, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v25, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v3 :: v_dual_lshrrev_b32 v27, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v1 :: v_dual_lshrrev_b32 v29, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v25.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v0 :: v_dual_lshrrev_b32 v28, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v2 :: v_dual_lshrrev_b32 v26, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v4 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v18 :: v_dual_lshrrev_b32 v52, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v20 :: v_dual_lshrrev_b32 v54, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v22 :: v_dual_lshrrev_b32 v64, 16, v23
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v64.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48f16_to_v48i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v23 :: v_dual_lshrrev_b32 v55, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v21 :: v_dual_lshrrev_b32 v53, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v19 :: v_dual_lshrrev_b32 v51, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v49, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v39, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v37, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v11 :: v_dual_lshrrev_b32 v35, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v9 :: v_dual_lshrrev_b32 v33, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v7 :: v_dual_lshrrev_b32 v31, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v5 :: v_dual_lshrrev_b32 v29, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v3 :: v_dual_lshrrev_b32 v27, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v1 :: v_dual_lshrrev_b32 v25, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v24
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v64, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v55, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v54, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v53, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v52, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v51, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v49, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v39, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v37, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v35, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v33, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v31, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v25, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v26, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v27, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v28, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v29, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v0 :: v_dual_lshrrev_b32 v26, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v2 :: v_dual_lshrrev_b32 v28, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v4 :: v_dual_lshrrev_b32 v30, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v6 :: v_dual_lshrrev_b32 v32, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v8 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v18 :: v_dual_lshrrev_b32 v52, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v20 :: v_dual_lshrrev_b32 v54, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v22 :: v_dual_lshrrev_b32 v64, 16, v23
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v25, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v26, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v27, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v28, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v29, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v30, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v31, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v32, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v33, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v34, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v35, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v36, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v37, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v39, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v49, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v51, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v52, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v53, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v54, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v55, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v64, v23, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -42434,6 +50581,362 @@ define inreg <48 x i16> @bitcast_v48f16_to_v48i16_scalar(<48 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v29
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v30
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v48f16_to_v48i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s60, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v6
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s72, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s63, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s73, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s62, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s61, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s60, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s74, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s74, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s74, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s72, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s63, s47
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s73, s59
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s62, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s61, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s60, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s7, s16, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v2 :: v_dual_lshrrev_b32 v52, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v4 :: v_dual_lshrrev_b32 v50, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v6 :: v_dual_lshrrev_b32 v48, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v8 :: v_dual_lshrrev_b32 v38, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v12 :: v_dual_lshrrev_b32 v34, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v14 :: v_dual_lshrrev_b32 v32, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v18 :: v_dual_lshrrev_b32 v28, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v20 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v25, 16, v22 :: v_dual_lshrrev_b32 v24, 16, v23
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s72 :: v_dual_mov_b32 v22, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v20, s62
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s61 :: v_dual_mov_b32 v18, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s57 :: v_dual_mov_b32 v25, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s59 :: v_dual_mov_b32 v27, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s56 :: v_dual_mov_b32 v29, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s45 :: v_dual_mov_b32 v31, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s43 :: v_dual_mov_b32 v33, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s41 :: v_dual_mov_b32 v35, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s15 :: v_dual_mov_b32 v37, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s13 :: v_dual_mov_b32 v39, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s11 :: v_dual_mov_b32 v49, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s9 :: v_dual_mov_b32 v51, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s6 :: v_dual_mov_b32 v53, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s4 :: v_dual_mov_b32 v55, s5
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v54.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v25.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v24.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v48f16_to_v48i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s61, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s60, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v6
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s72, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s63, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s73, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s62, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s61, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s60, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s74, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s74, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s74, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s74, s74, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s74, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s74, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s72, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s63, s47
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s73, s59
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s62, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s61, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s60, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s7, s16, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v1 :: v_dual_lshrrev_b32 v52, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v6 :: v_dual_lshrrev_b32 v48, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v4 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v10 :: v_dual_lshrrev_b32 v34, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v14 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v22 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v25, 16, v20 :: v_dual_lshrrev_b32 v24, 16, v19
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s72 :: v_dual_mov_b32 v20, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v22, s62
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s61 :: v_dual_mov_b32 v14, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s27 :: v_dual_mov_b32 v18, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s25 :: v_dual_mov_b32 v10, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v12, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s21 :: v_dual_mov_b32 v4, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s17 :: v_dual_mov_b32 v8, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s3 :: v_dual_mov_b32 v1, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v3, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s57 :: v_dual_mov_b32 v25, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s59 :: v_dual_mov_b32 v27, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s56 :: v_dual_mov_b32 v29, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s45 :: v_dual_mov_b32 v31, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s43 :: v_dual_mov_b32 v33, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s41 :: v_dual_mov_b32 v35, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s15 :: v_dual_mov_b32 v37, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s13 :: v_dual_mov_b32 v39, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s11 :: v_dual_mov_b32 v49, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s9 :: v_dual_mov_b32 v51, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s6 :: v_dual_mov_b32 v53, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s4 :: v_dual_mov_b32 v55, s5
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v55, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v54, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v53, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v52, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v51, 16, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v50, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v48, 16, v52
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v39, 16, v53
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v39, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v38, 16, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v37, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v35, 16, v39
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v34, 16, v48
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v33, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v32, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v30, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v29, 16, v35
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v49, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v36, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v31, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v28, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v27, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v26, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v25, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v24, 16, v30
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.832bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.832bit.ll
index d070d09aa3dc3..188eb008aa205 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.832bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.832bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <26 x float> @bitcast_v26i32_to_v26f32(<26 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v26i32_to_v26f32:
@@ -163,6 +165,37 @@ define <26 x float> @bitcast_v26i32_to_v26f32(<26 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v26f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -499,6 +532,77 @@ define inreg <26 x float> @bitcast_v26i32_to_v26f32_scalar(<26 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v26f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -660,6 +764,37 @@ define <26 x i32> @bitcast_v26f32_to_v26i32(<26 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v26i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1209,6 +1344,77 @@ define inreg <26 x i32> @bitcast_v26f32_to_v26i32_scalar(<26 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v26i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1383,6 +1589,37 @@ define <13 x i64> @bitcast_v26i32_to_v13i64(<26 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v13i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1719,6 +1956,77 @@ define inreg <13 x i64> @bitcast_v26i32_to_v13i64_scalar(<26 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v13i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1900,6 +2208,57 @@ define <26 x i32> @bitcast_v13i64_to_v26i32(<13 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v26i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2236,6 +2595,64 @@ define inreg <26 x i32> @bitcast_v13i64_to_v26i32_scalar(<13 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v26i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s5, v7
+; GFX13-NEXT: v_readfirstlane_b32 s4, v6
+; GFX13-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-NEXT: v_readfirstlane_b32 s8, v2
+; GFX13-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s10 :: v_dual_mov_b32 v19, s11
+; GFX13-NEXT: v_dual_mov_b32 v20, s8 :: v_dual_mov_b32 v21, s9
+; GFX13-NEXT: v_dual_mov_b32 v22, s6 :: v_dual_mov_b32 v23, s7
+; GFX13-NEXT: v_dual_mov_b32 v24, s4 :: v_dual_mov_b32 v25, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2410,6 +2827,37 @@ define <13 x double> @bitcast_v26i32_to_v13f64(<26 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v13f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2746,6 +3194,77 @@ define inreg <13 x double> @bitcast_v26i32_to_v13f64_scalar(<26 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v13f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2868,6 +3387,37 @@ define <26 x i32> @bitcast_v13f64_to_v26i32(<13 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13f64_to_v26i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3365,6 +3915,117 @@ define inreg <26 x i32> @bitcast_v13f64_to_v26i32_scalar(<13 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13f64_to_v26i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4231,6 +4892,232 @@ define <52 x i16> @bitcast_v26i32_to_v52i16(<26 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v26i32_to_v52i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v26i32_to_v52i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5111,6 +5998,183 @@ define inreg <52 x i16> @bitcast_v26i32_to_v52i16_scalar(<26 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v52i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s78, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s78, -1
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s12
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6370,6 +7434,232 @@ define <26 x i32> @bitcast_v52i16_to_v26i32(<52 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52i16_to_v26i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52i16_to_v26i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7397,6 +8687,132 @@ define inreg <26 x i32> @bitcast_v52i16_to_v26i32_scalar(<52 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52i16_to_v26i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8263,6 +9679,232 @@ define <52 x half> @bitcast_v26i32_to_v52f16(<26 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v26i32_to_v52f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v26i32_to_v52f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9143,6 +10785,183 @@ define inreg <52 x half> @bitcast_v26i32_to_v52f16_scalar(<26 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26i32_to_v52f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s78, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s78, -1
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s12
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10523,6 +12342,232 @@ define <26 x i32> @bitcast_v52f16_to_v26i32(<52 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52f16_to_v26i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52f16_to_v26i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11620,6 +13665,132 @@ define inreg <26 x i32> @bitcast_v52f16_to_v26i32_scalar(<52 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52f16_to_v26i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11781,6 +13952,37 @@ define <13 x i64> @bitcast_v26f32_to_v13i64(<26 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v13i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12330,6 +14532,77 @@ define inreg <13 x i64> @bitcast_v26f32_to_v13i64_scalar(<26 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v13i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12511,6 +14784,57 @@ define <26 x float> @bitcast_v13i64_to_v26f32(<13 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v26f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12847,6 +15171,64 @@ define inreg <26 x float> @bitcast_v13i64_to_v26f32_scalar(<13 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v26f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s5, v7
+; GFX13-NEXT: v_readfirstlane_b32 s4, v6
+; GFX13-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-NEXT: v_readfirstlane_b32 s8, v2
+; GFX13-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s10 :: v_dual_mov_b32 v19, s11
+; GFX13-NEXT: v_dual_mov_b32 v20, s8 :: v_dual_mov_b32 v21, s9
+; GFX13-NEXT: v_dual_mov_b32 v22, s6 :: v_dual_mov_b32 v23, s7
+; GFX13-NEXT: v_dual_mov_b32 v24, s4 :: v_dual_mov_b32 v25, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13008,6 +15390,37 @@ define <13 x double> @bitcast_v26f32_to_v13f64(<26 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v13f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13557,6 +15970,77 @@ define inreg <13 x double> @bitcast_v26f32_to_v13f64_scalar(<26 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v13f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13679,6 +16163,37 @@ define <26 x float> @bitcast_v13f64_to_v26f32(<13 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13f64_to_v26f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14176,6 +16691,117 @@ define inreg <26 x float> @bitcast_v13f64_to_v26f32_scalar(<13 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13f64_to_v26f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15016,6 +17642,232 @@ define <52 x i16> @bitcast_v26f32_to_v52i16(<26 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v26f32_to_v52i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v26f32_to_v52i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16242,6 +19094,183 @@ define inreg <52 x i16> @bitcast_v26f32_to_v52i16_scalar(<26 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v31
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v25, v26, 16, v32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v52i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s78, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s78, -1
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s12
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17501,6 +20530,232 @@ define <26 x float> @bitcast_v52i16_to_v26f32(<52 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52i16_to_v26f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52i16_to_v26f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18528,6 +21783,132 @@ define inreg <26 x float> @bitcast_v52i16_to_v26f32_scalar(<52 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52i16_to_v26f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -19368,6 +22749,232 @@ define <52 x half> @bitcast_v26f32_to_v52f16(<26 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v26f32_to_v52f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v26f32_to_v52f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20594,6 +24201,183 @@ define inreg <52 x half> @bitcast_v26f32_to_v52f16_scalar(<26 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v31
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v25, v26, 16, v32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v26f32_to_v52f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s4, v7
+; GFX13-NEXT: v_readfirstlane_b32 s5, v6
+; GFX13-NEXT: v_readfirstlane_b32 s6, v5
+; GFX13-NEXT: v_readfirstlane_b32 s7, v4
+; GFX13-NEXT: v_readfirstlane_b32 s8, v3
+; GFX13-NEXT: v_readfirstlane_b32 s9, v2
+; GFX13-NEXT: v_readfirstlane_b32 s10, v1
+; GFX13-NEXT: v_readfirstlane_b32 s11, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s78, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s78, -1
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s12, s4, 16
+; GFX13-NEXT: s_lshr_b32 s13, s5, 16
+; GFX13-NEXT: s_lshr_b32 s14, s6, 16
+; GFX13-NEXT: s_lshr_b32 s15, s7, 16
+; GFX13-NEXT: s_lshr_b32 s40, s8, 16
+; GFX13-NEXT: s_lshr_b32 s41, s9, 16
+; GFX13-NEXT: s_lshr_b32 s42, s10, 16
+; GFX13-NEXT: s_lshr_b32 s43, s11, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s12
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s11 :: v_dual_mov_b32 v19, s10
+; GFX13-NEXT: v_dual_mov_b32 v20, s9 :: v_dual_mov_b32 v21, s8
+; GFX13-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
+; GFX13-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21974,6 +25758,232 @@ define <26 x float> @bitcast_v52f16_to_v26f32(<52 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52f16_to_v26f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52f16_to_v26f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23071,6 +27081,132 @@ define inreg <26 x float> @bitcast_v52f16_to_v26f32_scalar(<52 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52f16_to_v26f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23252,6 +27388,57 @@ define <13 x double> @bitcast_v13i64_to_v13f64(<13 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v13f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23587,6 +27774,63 @@ define inreg <13 x double> @bitcast_v13i64_to_v13f64_scalar(<13 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v13f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s5, v7
+; GFX13-NEXT: v_readfirstlane_b32 s4, v6
+; GFX13-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-NEXT: v_readfirstlane_b32 s8, v2
+; GFX13-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s12, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s12, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s12, s12, exec_lo
+; GFX13-NEXT: s_cselect_b32 s12, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s10 :: v_dual_mov_b32 v19, s11
+; GFX13-NEXT: v_dual_mov_b32 v20, s8 :: v_dual_mov_b32 v21, s9
+; GFX13-NEXT: v_dual_mov_b32 v22, s6 :: v_dual_mov_b32 v23, s7
+; GFX13-NEXT: v_dual_mov_b32 v24, s4 :: v_dual_mov_b32 v25, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23709,6 +27953,37 @@ define <13 x i64> @bitcast_v13f64_to_v13i64(<13 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13f64_to_v13i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24206,6 +28481,117 @@ define inreg <13 x i64> @bitcast_v13f64_to_v13i64_scalar(<13 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13f64_to_v13i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25086,6 +29472,272 @@ define <52 x i16> @bitcast_v13i64_to_v52i16(<13 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v13i64_to_v52i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v13i64_to_v52i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25966,6 +30618,170 @@ define inreg <52 x i16> @bitcast_v13i64_to_v52i16_scalar(<13 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v52i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s5, v7
+; GFX13-NEXT: v_readfirstlane_b32 s4, v6
+; GFX13-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-NEXT: v_readfirstlane_b32 s8, v2
+; GFX13-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s78, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s5, 16
+; GFX13-NEXT: s_lshr_b32 s13, s4, 16
+; GFX13-NEXT: s_lshr_b32 s14, s7, 16
+; GFX13-NEXT: s_lshr_b32 s15, s6, 16
+; GFX13-NEXT: s_lshr_b32 s40, s9, 16
+; GFX13-NEXT: s_lshr_b32 s41, s8, 16
+; GFX13-NEXT: s_lshr_b32 s42, s11, 16
+; GFX13-NEXT: s_lshr_b32 s43, s10, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s78, -1
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s12, s5, 16
+; GFX13-NEXT: s_lshr_b32 s13, s4, 16
+; GFX13-NEXT: s_lshr_b32 s14, s7, 16
+; GFX13-NEXT: s_lshr_b32 s15, s6, 16
+; GFX13-NEXT: s_lshr_b32 s40, s9, 16
+; GFX13-NEXT: s_lshr_b32 s41, s8, 16
+; GFX13-NEXT: s_lshr_b32 s42, s11, 16
+; GFX13-NEXT: s_lshr_b32 s43, s10, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s12
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s10 :: v_dual_mov_b32 v19, s11
+; GFX13-NEXT: v_dual_mov_b32 v20, s8 :: v_dual_mov_b32 v21, s9
+; GFX13-NEXT: v_dual_mov_b32 v22, s6 :: v_dual_mov_b32 v23, s7
+; GFX13-NEXT: v_dual_mov_b32 v24, s4 :: v_dual_mov_b32 v25, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27225,6 +32041,232 @@ define <13 x i64> @bitcast_v52i16_to_v13i64(<52 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52i16_to_v13i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52i16_to_v13i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28252,6 +33294,132 @@ define inreg <13 x i64> @bitcast_v52i16_to_v13i64_scalar(<52 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52i16_to_v13i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29132,6 +34300,272 @@ define <52 x half> @bitcast_v13i64_to_v52f16(<13 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v13i64_to_v52f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v13i64_to_v52f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30012,6 +35446,170 @@ define inreg <52 x half> @bitcast_v13i64_to_v52f16_scalar(<13 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v22, s7 :: v_dual_mov_b32 v23, s6
; GFX11-NEXT: v_dual_mov_b32 v24, s5 :: v_dual_mov_b32 v25, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v13i64_to_v52f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-NEXT: v_readfirstlane_b32 s5, v7
+; GFX13-NEXT: v_readfirstlane_b32 s4, v6
+; GFX13-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-NEXT: v_readfirstlane_b32 s9, v3
+; GFX13-NEXT: v_readfirstlane_b32 s8, v2
+; GFX13-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-NEXT: s_mov_b32 s78, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s12, s5, 16
+; GFX13-NEXT: s_lshr_b32 s13, s4, 16
+; GFX13-NEXT: s_lshr_b32 s14, s7, 16
+; GFX13-NEXT: s_lshr_b32 s15, s6, 16
+; GFX13-NEXT: s_lshr_b32 s40, s9, 16
+; GFX13-NEXT: s_lshr_b32 s41, s8, 16
+; GFX13-NEXT: s_lshr_b32 s42, s11, 16
+; GFX13-NEXT: s_lshr_b32 s43, s10, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s78, -1
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s12, s5, 16
+; GFX13-NEXT: s_lshr_b32 s13, s4, 16
+; GFX13-NEXT: s_lshr_b32 s14, s7, 16
+; GFX13-NEXT: s_lshr_b32 s15, s6, 16
+; GFX13-NEXT: s_lshr_b32 s40, s9, 16
+; GFX13-NEXT: s_lshr_b32 s41, s8, 16
+; GFX13-NEXT: s_lshr_b32 s42, s11, 16
+; GFX13-NEXT: s_lshr_b32 s43, s10, 16
+; GFX13-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-NEXT: s_lshr_b32 s45, s28, 16
+; GFX13-NEXT: s_lshr_b32 s46, s27, 16
+; GFX13-NEXT: s_lshr_b32 s47, s26, 16
+; GFX13-NEXT: s_lshr_b32 s56, s25, 16
+; GFX13-NEXT: s_lshr_b32 s57, s24, 16
+; GFX13-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-NEXT: s_lshr_b32 s59, s22, 16
+; GFX13-NEXT: s_lshr_b32 s60, s21, 16
+; GFX13-NEXT: s_lshr_b32 s61, s20, 16
+; GFX13-NEXT: s_lshr_b32 s62, s19, 16
+; GFX13-NEXT: s_lshr_b32 s63, s18, 16
+; GFX13-NEXT: s_lshr_b32 s72, s17, 16
+; GFX13-NEXT: s_lshr_b32 s73, s16, 16
+; GFX13-NEXT: s_lshr_b32 s74, s3, 16
+; GFX13-NEXT: s_lshr_b32 s75, s2, 16
+; GFX13-NEXT: s_lshr_b32 s76, s1, 16
+; GFX13-NEXT: s_lshr_b32 s77, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s12
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s10 :: v_dual_mov_b32 v19, s11
+; GFX13-NEXT: v_dual_mov_b32 v20, s8 :: v_dual_mov_b32 v21, s9
+; GFX13-NEXT: v_dual_mov_b32 v22, s6 :: v_dual_mov_b32 v23, s7
+; GFX13-NEXT: v_dual_mov_b32 v24, s4 :: v_dual_mov_b32 v25, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31392,6 +36990,232 @@ define <13 x i64> @bitcast_v52f16_to_v13i64(<52 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52f16_to_v13i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52f16_to_v13i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32489,6 +38313,132 @@ define inreg <13 x i64> @bitcast_v52f16_to_v13i64_scalar(<52 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52f16_to_v13i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33290,6 +39240,232 @@ define <52 x i16> @bitcast_v13f64_to_v52i16(<13 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v13f64_to_v52i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v13f64_to_v52i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34455,6 +40631,363 @@ define inreg <52 x i16> @bitcast_v13f64_to_v52i16_scalar(<13 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v26
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v25, v31, 16, v27
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v13f64_to_v52i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s14, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s11, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s76, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s77, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s78, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s14, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[24:25], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[10:11], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v25 :: v_dual_lshrrev_b32 v26, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v23 :: v_dual_lshrrev_b32 v27, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v21 :: v_dual_lshrrev_b32 v29, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s11 :: v_dual_mov_b32 v21, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s7 :: v_dual_mov_b32 v25, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s78 :: v_dual_mov_b32 v54, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s76 :: v_dual_mov_b32 v50, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s74 :: v_dual_mov_b32 v38, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s72 :: v_dual_mov_b32 v34, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s62 :: v_dual_mov_b32 v30, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s60 :: v_dual_mov_b32 v27, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v65, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v55, s46 :: v_dual_mov_b32 v53, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v51, s44 :: v_dual_mov_b32 v49, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v39, s42 :: v_dual_mov_b32 v37, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v35, s40 :: v_dual_mov_b32 v33, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v31, s13 :: v_dual_mov_b32 v28, s12
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v13f64_to_v52i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s14, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s11, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s76, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s77, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s78, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s14, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[16:17], s[10:11], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[18:19], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[11:12], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[13:14], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[27:28], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[6:7], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[8:9], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[4:5], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v22 :: v_dual_lshrrev_b32 v29, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v24 :: v_dual_lshrrev_b32 v30, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v26 :: v_dual_lshrrev_b32 v20, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v17 :: v_dual_lshrrev_b32 v34, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v35, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v15, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v28 :: v_dual_lshrrev_b32 v10, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v1 :: v_dual_lshrrev_b32 v54, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v3 :: v_dual_lshrrev_b32 v55, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s16 :: v_dual_mov_b32 v8, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s20 :: v_dual_mov_b32 v27, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s24 :: v_dual_mov_b32 v11, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s28 :: v_dual_mov_b32 v16, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s4 :: v_dual_mov_b32 v23, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s8 :: v_dual_mov_b32 v5, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v1, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s19 :: v_dual_mov_b32 v7, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s23 :: v_dual_mov_b32 v14, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v12, s27 :: v_dual_mov_b32 v19, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s11 :: v_dual_mov_b32 v26, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v22, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s78 :: v_dual_mov_b32 v55, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s76 :: v_dual_mov_b32 v51, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s74 :: v_dual_mov_b32 v10, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s72 :: v_dual_mov_b32 v15, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s62 :: v_dual_mov_b32 v34, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s60 :: v_dual_mov_b32 v30, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v65, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, s46 :: v_dual_mov_b32 v52, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s44 :: v_dual_mov_b32 v48, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, s42 :: v_dual_mov_b32 v37, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s40 :: v_dual_mov_b32 v33, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v68, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v10, 16, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v64, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v54, 16, v68
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v54, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v49, 16, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v55, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v51, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v50, 16, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v38, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v48, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v15, 16, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v35, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v34, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v20, 16, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v67, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v66, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v65, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v53, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v52, 16, v55
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v39, 16, v50
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v37, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v36, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v33, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v30, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v32, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v31, 16, v27
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35714,6 +42247,232 @@ define <13 x double> @bitcast_v52i16_to_v13f64(<52 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52i16_to_v13f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52i16_to_v13f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36741,6 +43500,132 @@ define inreg <13 x double> @bitcast_v52i16_to_v13f64_scalar(<52 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52i16_to_v13f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37542,6 +44427,232 @@ define <52 x half> @bitcast_v13f64_to_v52f16(<13 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v13f64_to_v52f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr26_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v13f64_to_v52f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr27
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr26
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v26, 16, v25 :: v_dual_lshrrev_b32 v27, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v23 :: v_dual_lshrrev_b32 v29, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v21 :: v_dual_lshrrev_b32 v31, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v19 :: v_dual_lshrrev_b32 v33, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v17 :: v_dual_lshrrev_b32 v35, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v15 :: v_dual_lshrrev_b32 v37, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v53, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v5 :: v_dual_lshrrev_b32 v55, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v3 :: v_dual_lshrrev_b32 v65, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v1 :: v_dual_lshrrev_b32 v67, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v67, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v65, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v64, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v55, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v54, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v53, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v52, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v51, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v50, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v38, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v37, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v36, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v35, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v34, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v33, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v32, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v31, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v30, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v29, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v28, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v27, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v26, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38707,6 +45818,363 @@ define inreg <52 x half> @bitcast_v13f64_to_v52f16_scalar(<13 x double> inreg %a
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v26
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v25, v31, 16, v27
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v13f64_to_v52f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s14, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s11, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s76, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s77, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s78, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s14, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[24:25], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[10:11], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v25 :: v_dual_lshrrev_b32 v26, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v23 :: v_dual_lshrrev_b32 v27, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v21 :: v_dual_lshrrev_b32 v29, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v19 :: v_dual_lshrrev_b32 v30, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v17 :: v_dual_lshrrev_b32 v32, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v15 :: v_dual_lshrrev_b32 v34, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v13 :: v_dual_lshrrev_b32 v36, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v11 :: v_dual_lshrrev_b32 v38, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v9 :: v_dual_lshrrev_b32 v48, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v5 :: v_dual_lshrrev_b32 v52, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v3 :: v_dual_lshrrev_b32 v54, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v64, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s11 :: v_dual_mov_b32 v21, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s7 :: v_dual_mov_b32 v25, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s78 :: v_dual_mov_b32 v54, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s76 :: v_dual_mov_b32 v50, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s74 :: v_dual_mov_b32 v38, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s72 :: v_dual_mov_b32 v34, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s62 :: v_dual_mov_b32 v30, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s60 :: v_dual_mov_b32 v27, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v65, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v55, s46 :: v_dual_mov_b32 v53, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v51, s44 :: v_dual_mov_b32 v49, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v39, s42 :: v_dual_mov_b32 v37, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v35, s40 :: v_dual_mov_b32 v33, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v31, s13 :: v_dual_mov_b32 v28, s12
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v26.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v13f64_to_v52f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s12, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s14, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s11, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s76, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s77, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s78, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s14, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr12
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[21:22], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[16:17], s[10:11], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[18:19], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[11:12], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[13:14], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[27:28], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[6:7], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[8:9], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[4:5], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v22 :: v_dual_lshrrev_b32 v29, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v24 :: v_dual_lshrrev_b32 v30, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v26 :: v_dual_lshrrev_b32 v20, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v17 :: v_dual_lshrrev_b32 v34, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v35, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v15, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v28 :: v_dual_lshrrev_b32 v10, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v7 :: v_dual_lshrrev_b32 v50, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v9 :: v_dual_lshrrev_b32 v51, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v1 :: v_dual_lshrrev_b32 v54, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v3 :: v_dual_lshrrev_b32 v55, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s16 :: v_dual_mov_b32 v8, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s20 :: v_dual_mov_b32 v27, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s24 :: v_dual_mov_b32 v11, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s28 :: v_dual_mov_b32 v16, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s4 :: v_dual_mov_b32 v23, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s8 :: v_dual_mov_b32 v5, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v1, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s19 :: v_dual_mov_b32 v7, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s23 :: v_dual_mov_b32 v14, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v12, s27 :: v_dual_mov_b32 v19, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s11 :: v_dual_mov_b32 v26, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v22, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s78 :: v_dual_mov_b32 v55, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s76 :: v_dual_mov_b32 v51, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s74 :: v_dual_mov_b32 v10, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s72 :: v_dual_mov_b32 v15, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s62 :: v_dual_mov_b32 v34, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v20, s60 :: v_dual_mov_b32 v30, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v65, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, s46 :: v_dual_mov_b32 v52, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s44 :: v_dual_mov_b32 v48, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v39, s42 :: v_dual_mov_b32 v37, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s40 :: v_dual_mov_b32 v33, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s13 :: v_dual_mov_b32 v31, s12
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v68, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v10, 16, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v64, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v54, 16, v68
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v54, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v49, 16, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v55, 16, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v55, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v51, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v50, 16, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v38, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v48, 16, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v15, 16, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v35, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v34, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v20, 16, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v67, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v66, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v65, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v53, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v52, 16, v55
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v39, 16, v50
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v37, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v36, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v33, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v30, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v32, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v29, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v31, 16, v27
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -40087,6 +47555,232 @@ define <13 x double> @bitcast_v52f16_to_v13f64(<52 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52f16_to_v13f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr27_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52f16_to_v13f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v25 :: v_dual_lshrrev_b32 v28, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v26
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v65, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v66, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v67, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v64, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v55, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v54, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v53, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v52, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v51, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v50, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v49, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v48, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v39, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v38, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v37, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v36, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v35, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v34, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v33, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v32, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v31, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v30, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v29, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v28, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v27, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -41184,6 +48878,132 @@ define inreg <13 x double> @bitcast_v52f16_to_v13f64_scalar(<52 x half> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v52f16_to_v13f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s46, v7
+; GFX13-NEXT: v_readfirstlane_b32 s47, v6
+; GFX13-NEXT: v_readfirstlane_b32 s56, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s62, v3
+; GFX13-NEXT: v_readfirstlane_b32 s72, v2
+; GFX13-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-NEXT: v_readfirstlane_b32 s76, v8
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s45, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s60, s47, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s78, s73, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s76, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s73, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s47, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s46, s59
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -42514,6 +50334,254 @@ define <52 x half> @bitcast_v52i16_to_v52f16(<52 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v67, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v68, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52i16_to_v52f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v25 :: v_dual_lshrrev_b32 v67, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v23 :: v_dual_lshrrev_b32 v65, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v21 :: v_dual_lshrrev_b32 v55, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v19 :: v_dual_lshrrev_b32 v53, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v5 :: v_dual_lshrrev_b32 v27, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v3 :: v_dual_lshrrev_b32 v29, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v1 :: v_dual_lshrrev_b32 v31, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v0 :: v_dual_lshrrev_b32 v30, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v2 :: v_dual_lshrrev_b32 v28, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v4 :: v_dual_lshrrev_b32 v32, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v34, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v36, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v38, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v48, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v14 :: v_dual_lshrrev_b32 v50, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v16 :: v_dual_lshrrev_b32 v52, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v18 :: v_dual_lshrrev_b32 v54, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v20 :: v_dual_lshrrev_b32 v64, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v22 :: v_dual_lshrrev_b32 v66, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v24 :: v_dual_lshrrev_b32 v68, 16, v25
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v68.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52i16_to_v52f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v25 :: v_dual_lshrrev_b32 v67, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v23 :: v_dual_lshrrev_b32 v65, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v21 :: v_dual_lshrrev_b32 v55, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v19 :: v_dual_lshrrev_b32 v53, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v3 :: v_dual_lshrrev_b32 v29, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v1 :: v_dual_lshrrev_b32 v27, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v68, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v67, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v66, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v65, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v64, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v55, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v54, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v53, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v52, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v50, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v48, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v38, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v36, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v32, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v27, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v28, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v29, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v30, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v0 :: v_dual_lshrrev_b32 v28, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v2 :: v_dual_lshrrev_b32 v30, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v32, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v34, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v36, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v38, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v48, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v14 :: v_dual_lshrrev_b32 v50, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v16 :: v_dual_lshrrev_b32 v52, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v18 :: v_dual_lshrrev_b32 v54, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v20 :: v_dual_lshrrev_b32 v64, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v22 :: v_dual_lshrrev_b32 v66, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v24 :: v_dual_lshrrev_b32 v68, 16, v25
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v27, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v28, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v29, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v30, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v32, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v36, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v38, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v48, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v50, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v52, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v53, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v54, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v55, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v64, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v65, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v66, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v67, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v68, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -43942,6 +52010,390 @@ define inreg <52 x half> @bitcast_v52i16_to_v52f16_scalar(<52 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v31
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v25, v26, 16, v32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52i16_to_v52f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s77, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s76, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s75, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s78, v8
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s76, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s74, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s72, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s75, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s73, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s63, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s62, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s78, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s78, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s78, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s74, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s72, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s61, s77, s61
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s76, s59
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s75, s60
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s73, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s63, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s62, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, s61, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, s56, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v4 :: v_dual_lshrrev_b32 v54, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v6 :: v_dual_lshrrev_b32 v52, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v10 :: v_dual_lshrrev_b32 v48, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v14 :: v_dual_lshrrev_b32 v36, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v16 :: v_dual_lshrrev_b32 v34, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v20 :: v_dual_lshrrev_b32 v30, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v22 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v24 :: v_dual_lshrrev_b32 v26, 16, v25
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s77 :: v_dual_mov_b32 v24, s76
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s74 :: v_dual_mov_b32 v22, s72
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s75 :: v_dual_mov_b32 v20, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s63 :: v_dual_mov_b32 v18, s62
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s61 :: v_dual_mov_b32 v27, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s57 :: v_dual_mov_b32 v29, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s60 :: v_dual_mov_b32 v31, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s56 :: v_dual_mov_b32 v33, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s45 :: v_dual_mov_b32 v35, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s43 :: v_dual_mov_b32 v37, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s41 :: v_dual_mov_b32 v39, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s15 :: v_dual_mov_b32 v49, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s13 :: v_dual_mov_b32 v51, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s11 :: v_dual_mov_b32 v53, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s9 :: v_dual_mov_b32 v55, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s6 :: v_dual_mov_b32 v65, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s4 :: v_dual_mov_b32 v67, s7
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52i16_to_v52f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s77, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s76, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s75, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s78, v8
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s76, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s74, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s72, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s75, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s73, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s63, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s62, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s78, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s78, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s78, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s74, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s72, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s61, s77, s61
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s76, s59
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s75, s60
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s73, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s63, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s62, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, s61, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s56, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v66, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v64, 16, v2
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v6 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v24 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v22 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s77 :: v_dual_mov_b32 v22, s76
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s74 :: v_dual_mov_b32 v24, s72
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s75 :: v_dual_mov_b32 v16, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s63 :: v_dual_mov_b32 v18, s62
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s29 :: v_dual_mov_b32 v20, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s27 :: v_dual_mov_b32 v12, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v14, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s23 :: v_dual_mov_b32 v6, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s19 :: v_dual_mov_b32 v10, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s17 :: v_dual_mov_b32 v0, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s3 :: v_dual_mov_b32 v3, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s61 :: v_dual_mov_b32 v27, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s57 :: v_dual_mov_b32 v29, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s60 :: v_dual_mov_b32 v31, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s56 :: v_dual_mov_b32 v33, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s45 :: v_dual_mov_b32 v35, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s43 :: v_dual_mov_b32 v37, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s41 :: v_dual_mov_b32 v39, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s15 :: v_dual_mov_b32 v49, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s13 :: v_dual_mov_b32 v51, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s11 :: v_dual_mov_b32 v53, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s9 :: v_dual_mov_b32 v55, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s6 :: v_dual_mov_b32 v65, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s4 :: v_dual_mov_b32 v67, s7
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v69, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v67, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v66, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v55, 16, v69
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v55, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v54, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v54, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v52, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v49, 16, v55
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v50, 16, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v48, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v39, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v37, 16, v49
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v36, 16, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v68, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v35, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v34, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v32, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v31, 16, v37
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v65, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v64, 16, v68
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v51, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v38, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v33, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v30, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v29, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v28, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v26, 16, v32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -44920,6 +53372,254 @@ define <52 x i16> @bitcast_v52f16_to_v52i16(<52 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v24, v67, v24, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v25, v68, v25, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52f16_to_v52i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v25 :: v_dual_lshrrev_b32 v67, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v23 :: v_dual_lshrrev_b32 v65, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v21 :: v_dual_lshrrev_b32 v55, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v19 :: v_dual_lshrrev_b32 v53, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v5 :: v_dual_lshrrev_b32 v27, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v3 :: v_dual_lshrrev_b32 v29, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v1 :: v_dual_lshrrev_b32 v31, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v27.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v0 :: v_dual_lshrrev_b32 v30, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v2 :: v_dual_lshrrev_b32 v28, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v4 :: v_dual_lshrrev_b32 v32, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v34, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v36, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v38, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v48, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v14 :: v_dual_lshrrev_b32 v50, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v16 :: v_dual_lshrrev_b32 v52, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v18 :: v_dual_lshrrev_b32 v54, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v20 :: v_dual_lshrrev_b32 v64, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v22 :: v_dual_lshrrev_b32 v66, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v24 :: v_dual_lshrrev_b32 v68, 16, v25
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v68.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52f16_to_v52i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v25 :: v_dual_lshrrev_b32 v67, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v23 :: v_dual_lshrrev_b32 v65, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v21 :: v_dual_lshrrev_b32 v55, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v19 :: v_dual_lshrrev_b32 v53, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v13 :: v_dual_lshrrev_b32 v39, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v11 :: v_dual_lshrrev_b32 v37, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v9 :: v_dual_lshrrev_b32 v35, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v7 :: v_dual_lshrrev_b32 v33, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v3 :: v_dual_lshrrev_b32 v29, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v1 :: v_dual_lshrrev_b32 v27, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v26
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v68, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v67, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v66, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v65, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v64, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v55, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v54, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v53, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v52, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v50, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v48, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v38, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v36, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v32, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v27, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v28, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v29, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v30, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v0 :: v_dual_lshrrev_b32 v28, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v2 :: v_dual_lshrrev_b32 v30, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v32, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v6 :: v_dual_lshrrev_b32 v34, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v8 :: v_dual_lshrrev_b32 v36, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v10 :: v_dual_lshrrev_b32 v38, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v48, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v14 :: v_dual_lshrrev_b32 v50, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v16 :: v_dual_lshrrev_b32 v52, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v18 :: v_dual_lshrrev_b32 v54, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v20 :: v_dual_lshrrev_b32 v64, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v22 :: v_dual_lshrrev_b32 v66, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v24 :: v_dual_lshrrev_b32 v68, 16, v25
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v27, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v28, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v29, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v30, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v31, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v32, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v33, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v34, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v35, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v36, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v37, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v38, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v39, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v48, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v50, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v52, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v53, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v54, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v55, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v64, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v65, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v66, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v67, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v68, v25, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -46281,6 +54981,390 @@ define inreg <52 x i16> @bitcast_v52f16_to_v52i16_scalar(<52 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v31
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v25, v26, 16, v32
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v52f16_to_v52i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s77, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s76, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s75, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s63, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s78, v8
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s76, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s74, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s72, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s75, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s73, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s63, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s62, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s78, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s78, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s78, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s74, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s72, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s61, s77, s61
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s76, s59
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s75, s60
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s73, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s63, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s62, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, s61 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v0 :: v_dual_lshrrev_b32 v66, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v2 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v4 :: v_dual_lshrrev_b32 v54, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v6 :: v_dual_lshrrev_b32 v52, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v10 :: v_dual_lshrrev_b32 v48, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v12 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v14 :: v_dual_lshrrev_b32 v36, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v16 :: v_dual_lshrrev_b32 v34, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v20 :: v_dual_lshrrev_b32 v30, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v22 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v27, 16, v24 :: v_dual_lshrrev_b32 v26, 16, v25
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s77 :: v_dual_mov_b32 v24, s76
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s74 :: v_dual_mov_b32 v22, s72
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s75 :: v_dual_mov_b32 v20, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s63 :: v_dual_mov_b32 v18, s62
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v26, s61 :: v_dual_mov_b32 v27, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s57 :: v_dual_mov_b32 v29, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s60 :: v_dual_mov_b32 v31, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s56 :: v_dual_mov_b32 v33, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s45 :: v_dual_mov_b32 v35, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s43 :: v_dual_mov_b32 v37, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s41 :: v_dual_mov_b32 v39, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s15 :: v_dual_mov_b32 v49, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s13 :: v_dual_mov_b32 v51, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s11 :: v_dual_mov_b32 v53, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s9 :: v_dual_mov_b32 v55, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s6 :: v_dual_mov_b32 v65, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s4 :: v_dual_mov_b32 v67, s7
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v66.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v27.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v26.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v52f16_to_v52i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s77, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s76, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s75, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s63, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s62, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s78, v8
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s76, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s74, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s72, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s75, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s73, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s63, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s62, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s78, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s78, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s78, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s78, s78, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s78, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s78, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s74, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s72, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s61, s77, s61
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s76, s59
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s75, s60
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s73, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s63, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s62, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, s61 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v66, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v3 :: v_dual_lshrrev_b32 v64, 16, v2
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v0 :: v_dual_lshrrev_b32 v54, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v6 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v12 :: v_dual_lshrrev_b32 v36, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v16 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v24 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v27, 16, v22 :: v_dual_lshrrev_b32 v26, 16, v21
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s77 :: v_dual_mov_b32 v22, s76
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s74 :: v_dual_mov_b32 v24, s72
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s75 :: v_dual_mov_b32 v16, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s63 :: v_dual_mov_b32 v18, s62
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s29 :: v_dual_mov_b32 v20, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s27 :: v_dual_mov_b32 v12, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v14, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s23 :: v_dual_mov_b32 v6, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s19 :: v_dual_mov_b32 v10, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s17 :: v_dual_mov_b32 v0, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s3 :: v_dual_mov_b32 v3, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s61 :: v_dual_mov_b32 v27, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s57 :: v_dual_mov_b32 v29, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s60 :: v_dual_mov_b32 v31, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s56 :: v_dual_mov_b32 v33, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s45 :: v_dual_mov_b32 v35, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s43 :: v_dual_mov_b32 v37, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s41 :: v_dual_mov_b32 v39, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s15 :: v_dual_mov_b32 v49, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s13 :: v_dual_mov_b32 v51, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s11 :: v_dual_mov_b32 v53, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s9 :: v_dual_mov_b32 v55, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s6 :: v_dual_mov_b32 v65, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s4 :: v_dual_mov_b32 v67, s7
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v69, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v67, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v66, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v55, 16, v69
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v55, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v54, 16, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v54, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v52, 16, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v49, 16, v55
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v50, 16, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v50, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v48, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v39, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v37, 16, v49
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v36, 16, v50
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v37, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v68, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v35, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v34, 16, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v32, 16, v36
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v31, 16, v37
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v65, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v64, 16, v68
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v51, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v38, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v33, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v30, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v29, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v28, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v27, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v26, 16, v32
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.896bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.896bit.ll
index 8319358c1e356..9ab7ac42cdeb2 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.896bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.896bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <28 x float> @bitcast_v28i32_to_v28f32(<28 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v28i32_to_v28f32:
@@ -171,6 +173,38 @@ define <28 x float> @bitcast_v28i32_to_v28f32(<28 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v28f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -530,6 +564,82 @@ define inreg <28 x float> @bitcast_v28i32_to_v28f32_scalar(<28 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v28f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -698,6 +808,38 @@ define <28 x i32> @bitcast_v28f32_to_v28i32(<28 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v28i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1263,6 +1405,82 @@ define inreg <28 x i32> @bitcast_v28f32_to_v28i32_scalar(<28 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v28i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1445,6 +1663,38 @@ define <14 x i64> @bitcast_v28i32_to_v14i64(<28 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v14i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1804,6 +2054,82 @@ define inreg <14 x i64> @bitcast_v28i32_to_v14i64_scalar(<28 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v14i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1993,6 +2319,59 @@ define <28 x i32> @bitcast_v14i64_to_v28i32(<14 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v28i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2352,6 +2731,68 @@ define inreg <28 x i32> @bitcast_v14i64_to_v28i32_scalar(<14 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v28i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-NEXT: v_readfirstlane_b32 s4, v8
+; GFX13-NEXT: v_readfirstlane_b32 s7, v7
+; GFX13-NEXT: v_readfirstlane_b32 s6, v6
+; GFX13-NEXT: v_readfirstlane_b32 s9, v5
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s11, v3
+; GFX13-NEXT: v_readfirstlane_b32 s10, v2
+; GFX13-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s12 :: v_dual_mov_b32 v19, s13
+; GFX13-NEXT: v_dual_mov_b32 v20, s10 :: v_dual_mov_b32 v21, s11
+; GFX13-NEXT: v_dual_mov_b32 v22, s8 :: v_dual_mov_b32 v23, s9
+; GFX13-NEXT: v_dual_mov_b32 v24, s6 :: v_dual_mov_b32 v25, s7
+; GFX13-NEXT: v_dual_mov_b32 v26, s4 :: v_dual_mov_b32 v27, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2534,6 +2975,38 @@ define <14 x double> @bitcast_v28i32_to_v14f64(<28 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v14f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2893,6 +3366,82 @@ define inreg <14 x double> @bitcast_v28i32_to_v14f64_scalar(<28 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v14f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3019,6 +3568,38 @@ define <28 x i32> @bitcast_v14f64_to_v28i32(<14 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f64_to_v28i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3528,6 +4109,120 @@ define inreg <28 x i32> @bitcast_v14f64_to_v28i32_scalar(<14 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f64_to_v28i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4480,6 +5175,246 @@ define <56 x i16> @bitcast_v28i32_to_v56i16(<28 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v28i32_to_v56i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v28i32_to_v56i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5444,6 +6379,196 @@ define inreg <56 x i16> @bitcast_v28i32_to_v56i16_scalar(<28 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v56i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s90, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s90, -1
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s14
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6807,6 +7932,246 @@ define <28 x i32> @bitcast_v56i16_to_v28i32(<56 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56i16_to_v28i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56i16_to_v28i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7987,6 +9352,140 @@ define inreg <28 x i32> @bitcast_v56i16_to_v28i32_scalar(<56 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56i16_to_v28i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8939,6 +10438,246 @@ define <56 x half> @bitcast_v28i32_to_v56f16(<28 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v28i32_to_v56f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v28i32_to_v56f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9903,6 +11642,196 @@ define inreg <56 x half> @bitcast_v28i32_to_v56f16_scalar(<28 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28i32_to_v56f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s90, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s90, -1
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s14
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11403,6 +13332,246 @@ define <28 x i32> @bitcast_v56f16_to_v28i32(<56 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56f16_to_v28i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56f16_to_v28i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12595,6 +14764,140 @@ define inreg <28 x i32> @bitcast_v56f16_to_v28i32_scalar(<56 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56f16_to_v28i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12763,6 +15066,38 @@ define <14 x i64> @bitcast_v28f32_to_v14i64(<28 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v14i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13328,6 +15663,82 @@ define inreg <14 x i64> @bitcast_v28f32_to_v14i64_scalar(<28 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v14i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13517,6 +15928,59 @@ define <28 x float> @bitcast_v14i64_to_v28f32(<14 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v28f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13876,6 +16340,68 @@ define inreg <28 x float> @bitcast_v14i64_to_v28f32_scalar(<14 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v28f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-NEXT: v_readfirstlane_b32 s4, v8
+; GFX13-NEXT: v_readfirstlane_b32 s7, v7
+; GFX13-NEXT: v_readfirstlane_b32 s6, v6
+; GFX13-NEXT: v_readfirstlane_b32 s9, v5
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s11, v3
+; GFX13-NEXT: v_readfirstlane_b32 s10, v2
+; GFX13-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s12 :: v_dual_mov_b32 v19, s13
+; GFX13-NEXT: v_dual_mov_b32 v20, s10 :: v_dual_mov_b32 v21, s11
+; GFX13-NEXT: v_dual_mov_b32 v22, s8 :: v_dual_mov_b32 v23, s9
+; GFX13-NEXT: v_dual_mov_b32 v24, s6 :: v_dual_mov_b32 v25, s7
+; GFX13-NEXT: v_dual_mov_b32 v26, s4 :: v_dual_mov_b32 v27, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14044,6 +16570,38 @@ define <14 x double> @bitcast_v28f32_to_v14f64(<28 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v14f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14609,6 +17167,82 @@ define inreg <14 x double> @bitcast_v28f32_to_v14f64_scalar(<28 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v14f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14735,6 +17369,38 @@ define <28 x float> @bitcast_v14f64_to_v28f32(<14 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f64_to_v28f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15244,6 +17910,120 @@ define inreg <28 x float> @bitcast_v14f64_to_v28f32_scalar(<14 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f64_to_v28f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16168,6 +18948,246 @@ define <56 x i16> @bitcast_v28f32_to_v56i16(<28 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v28f32_to_v56i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v28f32_to_v56i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17527,6 +20547,196 @@ define inreg <56 x i16> @bitcast_v28f32_to_v56i16_scalar(<28 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v26, v29, 16, v33
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v34
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v56i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s90, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s90, -1
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s14
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18890,6 +22100,246 @@ define <28 x float> @bitcast_v56i16_to_v28f32(<56 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56i16_to_v28f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56i16_to_v28f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20070,6 +23520,140 @@ define inreg <28 x float> @bitcast_v56i16_to_v28f32_scalar(<56 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56i16_to_v28f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20994,6 +24578,246 @@ define <56 x half> @bitcast_v28f32_to_v56f16(<28 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v28f32_to_v56f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v28f32_to_v56f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22353,6 +26177,196 @@ define inreg <56 x half> @bitcast_v28f32_to_v56f16_scalar(<28 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v26, v29, 16, v33
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v34
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v28f32_to_v56f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s4, v9
+; GFX13-NEXT: v_readfirstlane_b32 s5, v8
+; GFX13-NEXT: v_readfirstlane_b32 s6, v7
+; GFX13-NEXT: v_readfirstlane_b32 s7, v6
+; GFX13-NEXT: v_readfirstlane_b32 s8, v5
+; GFX13-NEXT: v_readfirstlane_b32 s9, v4
+; GFX13-NEXT: v_readfirstlane_b32 s10, v3
+; GFX13-NEXT: v_readfirstlane_b32 s11, v2
+; GFX13-NEXT: v_readfirstlane_b32 s12, v1
+; GFX13-NEXT: v_readfirstlane_b32 s13, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s90, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s90, -1
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s14, s4, 16
+; GFX13-NEXT: s_lshr_b32 s15, s5, 16
+; GFX13-NEXT: s_lshr_b32 s40, s6, 16
+; GFX13-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-NEXT: s_lshr_b32 s42, s8, 16
+; GFX13-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-NEXT: s_lshr_b32 s44, s10, 16
+; GFX13-NEXT: s_lshr_b32 s45, s11, 16
+; GFX13-NEXT: s_lshr_b32 s46, s12, 16
+; GFX13-NEXT: s_lshr_b32 s47, s13, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s14
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s13 :: v_dual_mov_b32 v19, s12
+; GFX13-NEXT: v_dual_mov_b32 v20, s11 :: v_dual_mov_b32 v21, s10
+; GFX13-NEXT: v_dual_mov_b32 v22, s9 :: v_dual_mov_b32 v23, s8
+; GFX13-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
+; GFX13-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -23853,6 +27867,246 @@ define <28 x float> @bitcast_v56f16_to_v28f32(<56 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56f16_to_v28f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56f16_to_v28f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25045,6 +29299,140 @@ define inreg <28 x float> @bitcast_v56f16_to_v28f32_scalar(<56 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56f16_to_v28f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25234,6 +29622,59 @@ define <14 x double> @bitcast_v14i64_to_v14f64(<14 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v14f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25592,6 +30033,67 @@ define inreg <14 x double> @bitcast_v14i64_to_v14f64_scalar(<14 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v14f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-NEXT: v_readfirstlane_b32 s4, v8
+; GFX13-NEXT: v_readfirstlane_b32 s7, v7
+; GFX13-NEXT: v_readfirstlane_b32 s6, v6
+; GFX13-NEXT: v_readfirstlane_b32 s9, v5
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s11, v3
+; GFX13-NEXT: v_readfirstlane_b32 s10, v2
+; GFX13-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s14, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s14, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s12 :: v_dual_mov_b32 v19, s13
+; GFX13-NEXT: v_dual_mov_b32 v20, s10 :: v_dual_mov_b32 v21, s11
+; GFX13-NEXT: v_dual_mov_b32 v22, s8 :: v_dual_mov_b32 v23, s9
+; GFX13-NEXT: v_dual_mov_b32 v24, s6 :: v_dual_mov_b32 v25, s7
+; GFX13-NEXT: v_dual_mov_b32 v26, s4 :: v_dual_mov_b32 v27, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25718,6 +30220,38 @@ define <14 x i64> @bitcast_v14f64_to_v14i64(<14 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f64_to_v14i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26227,6 +30761,120 @@ define inreg <14 x i64> @bitcast_v14f64_to_v14i64_scalar(<14 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14f64_to_v14i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27193,6 +31841,288 @@ define <56 x i16> @bitcast_v14i64_to_v56i16(<14 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v14i64_to_v56i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v14i64_to_v56i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28157,6 +33087,182 @@ define inreg <56 x i16> @bitcast_v14i64_to_v56i16_scalar(<14 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v56i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-NEXT: v_readfirstlane_b32 s4, v8
+; GFX13-NEXT: v_readfirstlane_b32 s7, v7
+; GFX13-NEXT: v_readfirstlane_b32 s6, v6
+; GFX13-NEXT: v_readfirstlane_b32 s9, v5
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s11, v3
+; GFX13-NEXT: v_readfirstlane_b32 s10, v2
+; GFX13-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s90, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s5, 16
+; GFX13-NEXT: s_lshr_b32 s15, s4, 16
+; GFX13-NEXT: s_lshr_b32 s40, s7, 16
+; GFX13-NEXT: s_lshr_b32 s41, s6, 16
+; GFX13-NEXT: s_lshr_b32 s42, s9, 16
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s11, 16
+; GFX13-NEXT: s_lshr_b32 s45, s10, 16
+; GFX13-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-NEXT: s_lshr_b32 s47, s12, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s90, -1
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s14, s5, 16
+; GFX13-NEXT: s_lshr_b32 s15, s4, 16
+; GFX13-NEXT: s_lshr_b32 s40, s7, 16
+; GFX13-NEXT: s_lshr_b32 s41, s6, 16
+; GFX13-NEXT: s_lshr_b32 s42, s9, 16
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s11, 16
+; GFX13-NEXT: s_lshr_b32 s45, s10, 16
+; GFX13-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-NEXT: s_lshr_b32 s47, s12, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s14
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s12 :: v_dual_mov_b32 v19, s13
+; GFX13-NEXT: v_dual_mov_b32 v20, s10 :: v_dual_mov_b32 v21, s11
+; GFX13-NEXT: v_dual_mov_b32 v22, s8 :: v_dual_mov_b32 v23, s9
+; GFX13-NEXT: v_dual_mov_b32 v24, s6 :: v_dual_mov_b32 v25, s7
+; GFX13-NEXT: v_dual_mov_b32 v26, s4 :: v_dual_mov_b32 v27, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29520,6 +34626,246 @@ define <14 x i64> @bitcast_v56i16_to_v14i64(<56 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56i16_to_v14i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56i16_to_v14i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30700,6 +36046,140 @@ define inreg <14 x i64> @bitcast_v56i16_to_v14i64_scalar(<56 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56i16_to_v14i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31666,6 +37146,288 @@ define <56 x half> @bitcast_v14i64_to_v56f16(<14 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v14i64_to_v56f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v14i64_to_v56f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -32630,6 +38392,182 @@ define inreg <56 x half> @bitcast_v14i64_to_v56f16_scalar(<14 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v24, s7 :: v_dual_mov_b32 v25, s6
; GFX11-NEXT: v_dual_mov_b32 v26, s5 :: v_dual_mov_b32 v27, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v14i64_to_v56f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-NEXT: v_readfirstlane_b32 s5, v9
+; GFX13-NEXT: v_readfirstlane_b32 s4, v8
+; GFX13-NEXT: v_readfirstlane_b32 s7, v7
+; GFX13-NEXT: v_readfirstlane_b32 s6, v6
+; GFX13-NEXT: v_readfirstlane_b32 s9, v5
+; GFX13-NEXT: v_readfirstlane_b32 s8, v4
+; GFX13-NEXT: v_readfirstlane_b32 s11, v3
+; GFX13-NEXT: v_readfirstlane_b32 s10, v2
+; GFX13-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-NEXT: s_mov_b32 s90, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s14, s5, 16
+; GFX13-NEXT: s_lshr_b32 s15, s4, 16
+; GFX13-NEXT: s_lshr_b32 s40, s7, 16
+; GFX13-NEXT: s_lshr_b32 s41, s6, 16
+; GFX13-NEXT: s_lshr_b32 s42, s9, 16
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s11, 16
+; GFX13-NEXT: s_lshr_b32 s45, s10, 16
+; GFX13-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-NEXT: s_lshr_b32 s47, s12, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s90, -1
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: ; implicit-def: $sgpr15
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s14, s5, 16
+; GFX13-NEXT: s_lshr_b32 s15, s4, 16
+; GFX13-NEXT: s_lshr_b32 s40, s7, 16
+; GFX13-NEXT: s_lshr_b32 s41, s6, 16
+; GFX13-NEXT: s_lshr_b32 s42, s9, 16
+; GFX13-NEXT: s_lshr_b32 s43, s8, 16
+; GFX13-NEXT: s_lshr_b32 s44, s11, 16
+; GFX13-NEXT: s_lshr_b32 s45, s10, 16
+; GFX13-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-NEXT: s_lshr_b32 s47, s12, 16
+; GFX13-NEXT: s_lshr_b32 s56, s29, 16
+; GFX13-NEXT: s_lshr_b32 s57, s28, 16
+; GFX13-NEXT: s_lshr_b32 s58, s27, 16
+; GFX13-NEXT: s_lshr_b32 s59, s26, 16
+; GFX13-NEXT: s_lshr_b32 s60, s25, 16
+; GFX13-NEXT: s_lshr_b32 s61, s24, 16
+; GFX13-NEXT: s_lshr_b32 s62, s23, 16
+; GFX13-NEXT: s_lshr_b32 s63, s22, 16
+; GFX13-NEXT: s_lshr_b32 s72, s21, 16
+; GFX13-NEXT: s_lshr_b32 s73, s20, 16
+; GFX13-NEXT: s_lshr_b32 s74, s19, 16
+; GFX13-NEXT: s_lshr_b32 s75, s18, 16
+; GFX13-NEXT: s_lshr_b32 s76, s17, 16
+; GFX13-NEXT: s_lshr_b32 s77, s16, 16
+; GFX13-NEXT: s_lshr_b32 s78, s3, 16
+; GFX13-NEXT: s_lshr_b32 s79, s2, 16
+; GFX13-NEXT: s_lshr_b32 s88, s1, 16
+; GFX13-NEXT: s_lshr_b32 s89, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s40
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s14
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s12 :: v_dual_mov_b32 v19, s13
+; GFX13-NEXT: v_dual_mov_b32 v20, s10 :: v_dual_mov_b32 v21, s11
+; GFX13-NEXT: v_dual_mov_b32 v22, s8 :: v_dual_mov_b32 v23, s9
+; GFX13-NEXT: v_dual_mov_b32 v24, s6 :: v_dual_mov_b32 v25, s7
+; GFX13-NEXT: v_dual_mov_b32 v26, s4 :: v_dual_mov_b32 v27, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34130,6 +40068,246 @@ define <14 x i64> @bitcast_v56f16_to_v14i64(<56 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56f16_to_v14i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56f16_to_v14i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35322,6 +41500,140 @@ define inreg <14 x i64> @bitcast_v56f16_to_v14i64_scalar(<56 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56f16_to_v14i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36204,6 +42516,246 @@ define <56 x i16> @bitcast_v14f64_to_v56i16(<14 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v14f64_to_v56i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v14f64_to_v56i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37500,6 +44052,389 @@ define inreg <56 x i16> @bitcast_v14f64_to_v56i16_scalar(<14 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v26, v33, 16, v28
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v27, v35, 16, v29
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v14f64_to_v56i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s40, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s11, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s13, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s12, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s75, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s76, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s77, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s78, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s88, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s89, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s90, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s40, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[26:27], s[10:11], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[24:25], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[12:13], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v27 :: v_dual_lshrrev_b32 v28, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v25 :: v_dual_lshrrev_b32 v29, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v26, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v3, s3
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v7, s19
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v11, s23
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v15, s27
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v19, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s5 :: v_dual_mov_b32 v23, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s9 :: v_dual_mov_b32 v27, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s90 :: v_dual_mov_b32 v66, s89
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s88 :: v_dual_mov_b32 v54, s79
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s78 :: v_dual_mov_b32 v50, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s76 :: v_dual_mov_b32 v38, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s74 :: v_dual_mov_b32 v34, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s72 :: v_dual_mov_b32 v30, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s62 :: v_dual_mov_b32 v28, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v71, s60 :: v_dual_mov_b32 v70, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v69, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v65, s56 :: v_dual_mov_b32 v55, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v53, s46 :: v_dual_mov_b32 v51, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v49, s44 :: v_dual_mov_b32 v39, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s42 :: v_dual_mov_b32 v35, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s15 :: v_dual_mov_b32 v31, s14
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v31.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v14f64_to_v56i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s40, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s11, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s13, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s12, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s75, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s76, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s77, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s78, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s88, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s89, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s90, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s40, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[10:11], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[27:28], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[18:19], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[20:21], s[12:13], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[13:14], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[29:30], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[8:9], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[3:4], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[31:32], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v24 :: v_dual_lshrrev_b32 v33, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v26 :: v_dual_lshrrev_b32 v34, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v28 :: v_dual_lshrrev_b32 v22, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v14 :: v_dual_lshrrev_b32 v17, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v30 :: v_dual_lshrrev_b32 v12, 16, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v9 :: v_dual_lshrrev_b32 v53, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v55, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v4 :: v_dual_lshrrev_b32 v7, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v6 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v32 :: v_dual_lshrrev_b32 v2, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v69, 16, v0
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v31, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v3, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s20 :: v_dual_mov_b32 v8, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s24 :: v_dual_mov_b32 v15, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s28 :: v_dual_mov_b32 v20, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v27, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s8 :: v_dual_mov_b32 v23, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v32, s3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s17 :: v_dual_mov_b32 v4, s19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s21 :: v_dual_mov_b32 v9, s23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s25 :: v_dual_mov_b32 v16, s27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, s29 :: v_dual_mov_b32 v21, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s5 :: v_dual_mov_b32 v28, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v24, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v69, s90 :: v_dual_mov_b32 v2, s89
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s88 :: v_dual_mov_b32 v7, s79
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, s78 :: v_dual_mov_b32 v53, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v12, s76 :: v_dual_mov_b32 v50, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s74 :: v_dual_mov_b32 v39, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s72 :: v_dual_mov_b32 v22, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s62 :: v_dual_mov_b32 v33, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v71, s60 :: v_dual_mov_b32 v70, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v65, s56 :: v_dual_mov_b32 v64, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s46 :: v_dual_mov_b32 v52, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v51, s44 :: v_dual_mov_b32 v49, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s42 :: v_dual_mov_b32 v38, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s15 :: v_dual_mov_b32 v35, s14
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v12, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v70, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v54, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v69, 16, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v69, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v66, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v68, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v55, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v53, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v50, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v52, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v17, 16, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v39, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v37, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v22, 16, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v71, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v67, 16, v69
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v65, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v64, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v51, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v49, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v48, 16, v30
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v38, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v34, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v36, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v33, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v35, 16, v29
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38863,6 +45798,246 @@ define <14 x double> @bitcast_v56i16_to_v14f64(<56 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56i16_to_v14f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56i16_to_v14f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -40043,6 +47218,140 @@ define inreg <14 x double> @bitcast_v56i16_to_v14f64_scalar(<56 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56i16_to_v14f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -40925,6 +48234,246 @@ define <56 x half> @bitcast_v14f64_to_v56f16(<14 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v14f64_to_v56f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr28_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v14f64_to_v56f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr29
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr28
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v28, 16, v27 :: v_dual_lshrrev_b32 v29, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v25 :: v_dual_lshrrev_b32 v31, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v23 :: v_dual_lshrrev_b32 v33, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v21 :: v_dual_lshrrev_b32 v35, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v17 :: v_dual_lshrrev_b32 v39, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v15 :: v_dual_lshrrev_b32 v49, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v11 :: v_dual_lshrrev_b32 v53, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v9 :: v_dual_lshrrev_b32 v55, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v7 :: v_dual_lshrrev_b32 v65, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v5 :: v_dual_lshrrev_b32 v67, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v3 :: v_dual_lshrrev_b32 v69, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v71, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v69, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v68, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v67, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v66, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v65, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v64, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v55, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v54, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v53, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v52, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v49, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v48, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v39, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v38, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v37, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v36, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v35, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v34, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v33, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v32, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v31, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v30, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v29, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v28, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -42221,6 +49770,389 @@ define inreg <56 x half> @bitcast_v14f64_to_v56f16_scalar(<14 x double> inreg %a
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v26, v33, 16, v28
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v27, v35, 16, v29
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v14f64_to_v56f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s40, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s11, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s13, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s12, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s75, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s76, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s77, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s78, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s88, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s89, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s90, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s40, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[26:27], s[10:11], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[24:25], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[12:13], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v27 :: v_dual_lshrrev_b32 v28, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v25 :: v_dual_lshrrev_b32 v29, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v23 :: v_dual_lshrrev_b32 v30, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v21 :: v_dual_lshrrev_b32 v32, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v19 :: v_dual_lshrrev_b32 v34, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v17 :: v_dual_lshrrev_b32 v36, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v15 :: v_dual_lshrrev_b32 v38, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v13 :: v_dual_lshrrev_b32 v48, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v11 :: v_dual_lshrrev_b32 v50, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v9 :: v_dual_lshrrev_b32 v52, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v7 :: v_dual_lshrrev_b32 v54, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v5 :: v_dual_lshrrev_b32 v64, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v3 :: v_dual_lshrrev_b32 v66, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v68, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v26, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v3, s3
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v7, s19
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v11, s23
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v15, s27
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v19, s13
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s5 :: v_dual_mov_b32 v23, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s9 :: v_dual_mov_b32 v27, s11
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s90 :: v_dual_mov_b32 v66, s89
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s88 :: v_dual_mov_b32 v54, s79
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s78 :: v_dual_mov_b32 v50, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s76 :: v_dual_mov_b32 v38, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s74 :: v_dual_mov_b32 v34, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s72 :: v_dual_mov_b32 v30, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s62 :: v_dual_mov_b32 v28, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v71, s60 :: v_dual_mov_b32 v70, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v69, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v65, s56 :: v_dual_mov_b32 v55, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v53, s46 :: v_dual_mov_b32 v51, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v49, s44 :: v_dual_mov_b32 v39, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v37, s42 :: v_dual_mov_b32 v35, s41
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v33, s15 :: v_dual_mov_b32 v31, s14
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v28.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v31.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v14f64_to_v56f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s14, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s40, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s11, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s10, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s13, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s12, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s75, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s76, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s77, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s78, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s88, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s89, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s90, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s40, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr42
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr14
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[23:24], s[10:11], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[27:28], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[18:19], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[20:21], s[12:13], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[13:14], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[29:30], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[8:9], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[3:4], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[31:32], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v24 :: v_dual_lshrrev_b32 v33, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v26 :: v_dual_lshrrev_b32 v34, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v28 :: v_dual_lshrrev_b32 v22, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v37, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v14 :: v_dual_lshrrev_b32 v17, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v30 :: v_dual_lshrrev_b32 v12, 16, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v9 :: v_dual_lshrrev_b32 v53, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v55, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v4 :: v_dual_lshrrev_b32 v7, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v6 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v32 :: v_dual_lshrrev_b32 v2, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v69, 16, v0
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v31, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s16 :: v_dual_mov_b32 v3, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s20 :: v_dual_mov_b32 v8, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s24 :: v_dual_mov_b32 v15, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s28 :: v_dual_mov_b32 v20, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v18, s4 :: v_dual_mov_b32 v27, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s8 :: v_dual_mov_b32 v23, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v32, s3
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v6, s17 :: v_dual_mov_b32 v4, s19
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s21 :: v_dual_mov_b32 v9, s23
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s25 :: v_dual_mov_b32 v16, s27
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, s29 :: v_dual_mov_b32 v21, s13
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s5 :: v_dual_mov_b32 v28, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v26, s9 :: v_dual_mov_b32 v24, s11
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v69, s90 :: v_dual_mov_b32 v2, s89
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s88 :: v_dual_mov_b32 v7, s79
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, s78 :: v_dual_mov_b32 v53, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v12, s76 :: v_dual_mov_b32 v50, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s74 :: v_dual_mov_b32 v39, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v37, s72 :: v_dual_mov_b32 v22, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s62 :: v_dual_mov_b32 v33, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v71, s60 :: v_dual_mov_b32 v70, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v67, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v65, s56 :: v_dual_mov_b32 v64, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s46 :: v_dual_mov_b32 v52, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v51, s44 :: v_dual_mov_b32 v49, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s42 :: v_dual_mov_b32 v38, s41
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s15 :: v_dual_mov_b32 v35, s14
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v2, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v12, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v70, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v54, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v69, 16, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v69, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v66, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v68, 16, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v7, 16, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v55, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v53, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v50, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v52, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v17, 16, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v39, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v37, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v22, 16, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v71, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v67, 16, v69
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v65, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v64, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v51, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v49, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v48, 16, v30
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v38, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v34, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v36, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v33, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v35, 16, v29
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -43721,6 +51653,246 @@ define <14 x double> @bitcast_v56f16_to_v14f64(<56 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56f16_to_v14f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr29_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56f16_to_v14f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v27 :: v_dual_lshrrev_b32 v30, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v28
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v69, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v70, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v71, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v68, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v67, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v66, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v65, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v64, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v55, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v54, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v53, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v52, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v51, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v50, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v49, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v48, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v39, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v38, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v37, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v36, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v35, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v34, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v33, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v32, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v31, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v30, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v29, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -44913,6 +53085,140 @@ define inreg <14 x double> @bitcast_v56f16_to_v14f64_scalar(<56 x half> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v56f16_to_v14f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s44, v9
+; GFX13-NEXT: v_readfirstlane_b32 s56, v8
+; GFX13-NEXT: v_readfirstlane_b32 s58, v7
+; GFX13-NEXT: v_readfirstlane_b32 s59, v6
+; GFX13-NEXT: v_readfirstlane_b32 s60, v5
+; GFX13-NEXT: v_readfirstlane_b32 s62, v4
+; GFX13-NEXT: v_readfirstlane_b32 s74, v3
+; GFX13-NEXT: v_readfirstlane_b32 s76, v2
+; GFX13-NEXT: v_readfirstlane_b32 s77, v1
+; GFX13-NEXT: v_readfirstlane_b32 s78, v0
+; GFX13-NEXT: v_readfirstlane_b32 s88, v10
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s45, s2, 16
+; GFX13-NEXT: s_lshr_b32 s46, s1, 16
+; GFX13-NEXT: s_lshr_b32 s47, s0, 16
+; GFX13-NEXT: s_lshr_b32 s57, s44, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s63, s58, 16
+; GFX13-NEXT: s_lshr_b32 s72, s59, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s89, s76, 16
+; GFX13-NEXT: s_lshr_b32 s90, s77, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s88, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s77, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s76, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s59, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s58, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s44, s57
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -46375,6 +54681,270 @@ define <56 x half> @bitcast_v56i16_to_v56f16(<56 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v71, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v80, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56i16_to_v56f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v27 :: v_dual_lshrrev_b32 v71, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v25 :: v_dual_lshrrev_b32 v69, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v23 :: v_dual_lshrrev_b32 v67, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v21 :: v_dual_lshrrev_b32 v65, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v19 :: v_dual_lshrrev_b32 v55, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v17 :: v_dual_lshrrev_b32 v53, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v51, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v49, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v39, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v37, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v35, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v29, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v3 :: v_dual_lshrrev_b32 v31, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v1 :: v_dual_lshrrev_b32 v33, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v32, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v2 :: v_dual_lshrrev_b32 v30, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v4 :: v_dual_lshrrev_b32 v34, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v6 :: v_dual_lshrrev_b32 v36, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v8 :: v_dual_lshrrev_b32 v38, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v10 :: v_dual_lshrrev_b32 v48, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v12 :: v_dual_lshrrev_b32 v50, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v14 :: v_dual_lshrrev_b32 v52, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v16 :: v_dual_lshrrev_b32 v54, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v18 :: v_dual_lshrrev_b32 v64, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v20 :: v_dual_lshrrev_b32 v66, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v22 :: v_dual_lshrrev_b32 v68, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v24 :: v_dual_lshrrev_b32 v70, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v26 :: v_dual_lshrrev_b32 v80, 16, v27
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v80.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56i16_to_v56f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v27 :: v_dual_lshrrev_b32 v71, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v25 :: v_dual_lshrrev_b32 v69, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v23 :: v_dual_lshrrev_b32 v67, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v21 :: v_dual_lshrrev_b32 v65, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v19 :: v_dual_lshrrev_b32 v55, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v17 :: v_dual_lshrrev_b32 v53, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v51, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v49, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v39, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v37, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v35, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v33, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v31, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v1 :: v_dual_lshrrev_b32 v29, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v80, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v71, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v70, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v69, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v68, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v67, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v66, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v65, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v64, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v55, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v54, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v53, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v51, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v49, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v39, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v37, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v35, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v29, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v30, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v31, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v33, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v0 :: v_dual_lshrrev_b32 v30, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v2 :: v_dual_lshrrev_b32 v32, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v6 :: v_dual_lshrrev_b32 v36, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v8 :: v_dual_lshrrev_b32 v38, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v10 :: v_dual_lshrrev_b32 v48, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v12 :: v_dual_lshrrev_b32 v50, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v14 :: v_dual_lshrrev_b32 v52, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v16 :: v_dual_lshrrev_b32 v54, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v18 :: v_dual_lshrrev_b32 v64, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v20 :: v_dual_lshrrev_b32 v66, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v22 :: v_dual_lshrrev_b32 v68, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v24 :: v_dual_lshrrev_b32 v70, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v26 :: v_dual_lshrrev_b32 v80, 16, v27
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v29, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v30, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v31, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v33, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v35, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v37, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v39, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v49, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v51, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v53, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v54, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v55, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v64, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v65, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v66, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v67, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v68, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v69, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v70, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v71, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v80, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -47940,6 +56510,418 @@ define inreg <56 x half> @bitcast_v56i16_to_v56f16_scalar(<56 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v26, v29, 16, v33
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v34
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56i16_to_v56f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s79, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s89, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s88, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s78, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s76, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s77, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s75, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s90, v10
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s79, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s89, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s88, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s78, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s76, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s74, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s75, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s73, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s72, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s90, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s90, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s90, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s79, s59
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s76, s57
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s88, s62
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s74, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s63, s89, s63
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s78, s60
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s77, s61
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s75, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s73, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s72, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, s63, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, s56, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v4 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v6 :: v_dual_lshrrev_b32 v64, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v8 :: v_dual_lshrrev_b32 v54, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v12 :: v_dual_lshrrev_b32 v50, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v14 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v16 :: v_dual_lshrrev_b32 v38, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v18 :: v_dual_lshrrev_b32 v36, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v22 :: v_dual_lshrrev_b32 v32, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v24 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v26 :: v_dual_lshrrev_b32 v28, 16, v27
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v27, s79 :: v_dual_mov_b32 v26, s89
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s88 :: v_dual_mov_b32 v24, s78
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s76 :: v_dual_mov_b32 v22, s74
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s77 :: v_dual_mov_b32 v20, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s73 :: v_dual_mov_b32 v18, s72
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s59 :: v_dual_mov_b32 v29, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s62 :: v_dual_mov_b32 v31, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s57 :: v_dual_mov_b32 v33, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s61 :: v_dual_mov_b32 v35, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s56 :: v_dual_mov_b32 v37, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s45 :: v_dual_mov_b32 v39, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s43 :: v_dual_mov_b32 v49, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s41 :: v_dual_mov_b32 v51, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s15 :: v_dual_mov_b32 v53, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s13 :: v_dual_mov_b32 v55, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s11 :: v_dual_mov_b32 v65, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s9 :: v_dual_mov_b32 v67, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s8 :: v_dual_mov_b32 v69, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v70, s4 :: v_dual_mov_b32 v71, s5
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56i16_to_v56f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s79, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s89, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s88, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s78, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s76, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s77, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s75, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s90, v10
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s79, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s89, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s88, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s78, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s76, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s74, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s75, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s73, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s72, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s90, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s90, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s90, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s79, s59
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s76, s57
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s88, s62
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s74, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s63, s89, s63
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s78, s60
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s77, s61
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s75, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s73, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s72, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, s63, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, s56, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, s46, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v6 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v4 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v12 :: v_dual_lshrrev_b32 v54, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v22 :: v_dual_lshrrev_b32 v36, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v26 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v24 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s79 :: v_dual_mov_b32 v24, s89
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s88 :: v_dual_mov_b32 v26, s78
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v27, s76 :: v_dual_mov_b32 v18, s74
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s77 :: v_dual_mov_b32 v20, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v22, s72
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s29 :: v_dual_mov_b32 v14, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v16, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s25 :: v_dual_mov_b32 v8, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s21 :: v_dual_mov_b32 v12, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s19 :: v_dual_mov_b32 v4, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s59 :: v_dual_mov_b32 v29, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s62 :: v_dual_mov_b32 v31, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s57 :: v_dual_mov_b32 v33, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s61 :: v_dual_mov_b32 v35, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s56 :: v_dual_mov_b32 v37, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s45 :: v_dual_mov_b32 v39, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s43 :: v_dual_mov_b32 v49, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s41 :: v_dual_mov_b32 v51, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s15 :: v_dual_mov_b32 v53, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s13 :: v_dual_mov_b32 v55, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s11 :: v_dual_mov_b32 v65, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s9 :: v_dual_mov_b32 v67, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, s8 :: v_dual_mov_b32 v69, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, s4 :: v_dual_mov_b32 v71, s5
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v80, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v71, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v70, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v69, 16, v80
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v69, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v70, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v68, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v67, 16, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v65, 16, v69
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v64, 16, v70
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v55, 16, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v54, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v52, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v51, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v50, 16, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v49, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v39, 16, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v38, 16, v52
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v39, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v37, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v36, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v34, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v33, 16, v39
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v66, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v48, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v35, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v32, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v31, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v30, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v29, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v34
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -49010,6 +57992,270 @@ define <56 x i16> @bitcast_v56f16_to_v56i16(<56 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v26, v71, v26, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v27, v80, v27, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56f16_to_v56i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v27 :: v_dual_lshrrev_b32 v71, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v25 :: v_dual_lshrrev_b32 v69, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v23 :: v_dual_lshrrev_b32 v67, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v21 :: v_dual_lshrrev_b32 v65, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v19 :: v_dual_lshrrev_b32 v55, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v17 :: v_dual_lshrrev_b32 v53, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v51, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v49, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v39, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v37, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v35, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v29, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v3 :: v_dual_lshrrev_b32 v31, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v1 :: v_dual_lshrrev_b32 v33, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v29.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v0 :: v_dual_lshrrev_b32 v32, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v2 :: v_dual_lshrrev_b32 v30, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v4 :: v_dual_lshrrev_b32 v34, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v6 :: v_dual_lshrrev_b32 v36, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v8 :: v_dual_lshrrev_b32 v38, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v10 :: v_dual_lshrrev_b32 v48, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v12 :: v_dual_lshrrev_b32 v50, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v14 :: v_dual_lshrrev_b32 v52, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v16 :: v_dual_lshrrev_b32 v54, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v18 :: v_dual_lshrrev_b32 v64, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v20 :: v_dual_lshrrev_b32 v66, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v22 :: v_dual_lshrrev_b32 v68, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v24 :: v_dual_lshrrev_b32 v70, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v26 :: v_dual_lshrrev_b32 v80, 16, v27
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v80.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56f16_to_v56i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v27 :: v_dual_lshrrev_b32 v71, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v25 :: v_dual_lshrrev_b32 v69, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v23 :: v_dual_lshrrev_b32 v67, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v21 :: v_dual_lshrrev_b32 v65, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v19 :: v_dual_lshrrev_b32 v55, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v17 :: v_dual_lshrrev_b32 v53, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v51, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v13 :: v_dual_lshrrev_b32 v49, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v11 :: v_dual_lshrrev_b32 v39, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v9 :: v_dual_lshrrev_b32 v37, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v7 :: v_dual_lshrrev_b32 v35, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v5 :: v_dual_lshrrev_b32 v33, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v31, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v1 :: v_dual_lshrrev_b32 v29, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v28
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v80, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v71, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v70, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v69, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v68, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v67, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v66, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v65, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v64, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v55, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v54, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v53, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v51, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v49, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v39, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v37, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v35, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v29, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v30, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v31, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v33, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v0 :: v_dual_lshrrev_b32 v30, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v2 :: v_dual_lshrrev_b32 v32, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v4 :: v_dual_lshrrev_b32 v34, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v6 :: v_dual_lshrrev_b32 v36, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v8 :: v_dual_lshrrev_b32 v38, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v10 :: v_dual_lshrrev_b32 v48, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v12 :: v_dual_lshrrev_b32 v50, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v14 :: v_dual_lshrrev_b32 v52, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v16 :: v_dual_lshrrev_b32 v54, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v18 :: v_dual_lshrrev_b32 v64, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v20 :: v_dual_lshrrev_b32 v66, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v22 :: v_dual_lshrrev_b32 v68, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v24 :: v_dual_lshrrev_b32 v70, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v26 :: v_dual_lshrrev_b32 v80, 16, v27
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v29, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v30, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v31, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v32, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v33, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v34, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v35, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v36, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v37, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v38, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v39, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v48, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v49, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v50, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v51, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v53, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v54, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v55, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v64, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v65, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v66, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v67, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v68, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v69, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v70, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v71, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v80, v27, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -50496,6 +59742,418 @@ define inreg <56 x i16> @bitcast_v56f16_to_v56i16_scalar(<56 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v26, v29, 16, v33
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v34
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v56f16_to_v56i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s79, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s89, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s88, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s78, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s76, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s77, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s75, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s72, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s90, v10
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s79, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s89, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s88, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s78, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s76, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s74, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s75, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s73, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s72, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s90, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s90, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s90, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s79, s59
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s76, s57
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s88, s62
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s74, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s63, s89, s63
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s78, s60
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s77, s61
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s75, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s73, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s72, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, s63 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v2 :: v_dual_lshrrev_b32 v68, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v4 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v6 :: v_dual_lshrrev_b32 v64, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v8 :: v_dual_lshrrev_b32 v54, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v12 :: v_dual_lshrrev_b32 v50, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v14 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v16 :: v_dual_lshrrev_b32 v38, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v18 :: v_dual_lshrrev_b32 v36, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v22 :: v_dual_lshrrev_b32 v32, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v24 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v29, 16, v26 :: v_dual_lshrrev_b32 v28, 16, v27
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v27, s79 :: v_dual_mov_b32 v26, s89
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s88 :: v_dual_mov_b32 v24, s78
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s76 :: v_dual_mov_b32 v22, s74
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s77 :: v_dual_mov_b32 v20, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s73 :: v_dual_mov_b32 v18, s72
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s59 :: v_dual_mov_b32 v29, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s62 :: v_dual_mov_b32 v31, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s57 :: v_dual_mov_b32 v33, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s61 :: v_dual_mov_b32 v35, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s56 :: v_dual_mov_b32 v37, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s45 :: v_dual_mov_b32 v39, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s43 :: v_dual_mov_b32 v49, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s41 :: v_dual_mov_b32 v51, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s15 :: v_dual_mov_b32 v53, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s13 :: v_dual_mov_b32 v55, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s11 :: v_dual_mov_b32 v65, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s9 :: v_dual_mov_b32 v67, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s8 :: v_dual_mov_b32 v69, s7
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v70, s4 :: v_dual_mov_b32 v71, s5
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v70.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v29.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v28.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v56f16_to_v56i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s79, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s89, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s88, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s78, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s76, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s77, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s75, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s73, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s72, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s90, v10
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s79, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s89, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s88, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s78, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s76, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s74, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s77, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s75, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s73, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s72, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s90, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s90, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s90, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s90, s90, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s90, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s90, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s79, s59
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s76, s57
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s88, s62
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s74, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s63, s89, s63
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s78, s60
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s77, s61
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s75, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s73, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s72, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s6, s16, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s5
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s4
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, s63 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v2 :: v_dual_lshrrev_b32 v70, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v0 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v6 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v4 :: v_dual_lshrrev_b32 v64, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v12 :: v_dual_lshrrev_b32 v54, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v8 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v14 :: v_dual_lshrrev_b32 v38, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v22 :: v_dual_lshrrev_b32 v36, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v18 :: v_dual_lshrrev_b32 v32, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v26 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v29, 16, v24 :: v_dual_lshrrev_b32 v28, 16, v23
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s79 :: v_dual_mov_b32 v24, s89
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s88 :: v_dual_mov_b32 v26, s78
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v27, s76 :: v_dual_mov_b32 v18, s74
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s77 :: v_dual_mov_b32 v20, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v22, s72
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s29 :: v_dual_mov_b32 v14, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v16, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s25 :: v_dual_mov_b32 v8, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s21 :: v_dual_mov_b32 v12, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s19 :: v_dual_mov_b32 v4, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v6, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s59 :: v_dual_mov_b32 v29, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s62 :: v_dual_mov_b32 v31, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s57 :: v_dual_mov_b32 v33, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s61 :: v_dual_mov_b32 v35, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s56 :: v_dual_mov_b32 v37, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s45 :: v_dual_mov_b32 v39, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s43 :: v_dual_mov_b32 v49, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s41 :: v_dual_mov_b32 v51, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s15 :: v_dual_mov_b32 v53, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s13 :: v_dual_mov_b32 v55, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s11 :: v_dual_mov_b32 v65, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s9 :: v_dual_mov_b32 v67, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, s8 :: v_dual_mov_b32 v69, s7
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, s4 :: v_dual_mov_b32 v71, s5
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v80, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v6, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v71, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v70, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v69, 16, v80
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v69, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v70, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v68, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v67, 16, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v65, 16, v69
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v64, 16, v70
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v64, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v65, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v55, 16, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v54, 16, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v52, 16, v64
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v51, 16, v65
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v16, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v51, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v52, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v50, 16, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v49, 16, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v39, 16, v51
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v38, 16, v52
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v21, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v38, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v39, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v10, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v15, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v20, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v37, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v36, 16, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v34, 16, v38
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v33, 16, v39
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v26, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v25, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v66, 16, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v53, 16, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v48, 16, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v35, 16, v20
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v32, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v31, 16, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v30, 16, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v29, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v28, 16, v34
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.960bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.960bit.ll
index deced731f537b..60dca38558f9d 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.960bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.960bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <30 x float> @bitcast_v30i32_to_v30f32(<30 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v30i32_to_v30f32:
@@ -179,6 +181,39 @@ define <30 x float> @bitcast_v30i32_to_v30f32(<30 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB0_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v30f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB0_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB0_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -561,6 +596,87 @@ define inreg <30 x float> @bitcast_v30i32_to_v30f32_scalar(<30 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v30f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -736,6 +852,39 @@ define <30 x i32> @bitcast_v30f32_to_v30i32(<30 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB2_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v30i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB2_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB2_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1333,6 +1482,87 @@ define inreg <30 x i32> @bitcast_v30f32_to_v30i32_scalar(<30 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v30i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1523,6 +1753,39 @@ define <15 x i64> @bitcast_v30i32_to_v15i64(<30 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB4_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v15i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB4_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB4_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1905,6 +2168,87 @@ define inreg <15 x i64> @bitcast_v30i32_to_v15i64_scalar(<30 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v15i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB5_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB5_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2103,6 +2447,62 @@ define <30 x i32> @bitcast_v15i64_to_v30i32(<15 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB6_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v30i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB6_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2485,6 +2885,72 @@ define inreg <30 x i32> @bitcast_v15i64_to_v30i32_scalar(<15 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v30i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s5, v11
+; GFX13-NEXT: v_readfirstlane_b32 s4, v10
+; GFX13-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-NEXT: v_readfirstlane_b32 s6, v8
+; GFX13-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-NEXT: v_readfirstlane_b32 s11, v5
+; GFX13-NEXT: v_readfirstlane_b32 s10, v4
+; GFX13-NEXT: v_readfirstlane_b32 s13, v3
+; GFX13-NEXT: v_readfirstlane_b32 s12, v2
+; GFX13-NEXT: v_readfirstlane_b32 s15, v1
+; GFX13-NEXT: v_readfirstlane_b32 s14, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB7_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB7_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v19, s15
+; GFX13-NEXT: v_dual_mov_b32 v20, s12 :: v_dual_mov_b32 v21, s13
+; GFX13-NEXT: v_dual_mov_b32 v22, s10 :: v_dual_mov_b32 v23, s11
+; GFX13-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v25, s9
+; GFX13-NEXT: v_dual_mov_b32 v26, s6 :: v_dual_mov_b32 v27, s7
+; GFX13-NEXT: v_dual_mov_b32 v28, s4 :: v_dual_mov_b32 v29, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2675,6 +3141,39 @@ define <15 x double> @bitcast_v30i32_to_v15f64(<30 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB8_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v15f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB8_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-NEXT: .LBB8_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3057,6 +3556,87 @@ define inreg <15 x double> @bitcast_v30i32_to_v15f64_scalar(<30 x i32> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v15f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3187,6 +3767,39 @@ define <30 x i32> @bitcast_v15f64_to_v30i32(<15 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB10_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15f64_to_v30i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB10_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB10_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3724,6 +4337,127 @@ define inreg <30 x i32> @bitcast_v15f64_to_v30i32_scalar(<15 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15f64_to_v30i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[64:65], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB11_5
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB11_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4756,6 +5490,260 @@ define <60 x i16> @bitcast_v30i32_to_v60i16(<30 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v30i32_to_v60i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB12_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v30i32_to_v60i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB12_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB12_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5812,6 +6800,209 @@ define inreg <60 x i16> @bitcast_v30i32_to_v60i16_scalar(<30 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v60i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s94, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB13_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: s_branch .LBB13_3
+; GFX13-NEXT: .LBB13_2:
+; GFX13-NEXT: s_mov_b32 s94, -1
+; GFX13-NEXT: ; implicit-def: $sgpr93
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr91
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: .LBB13_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: .LBB13_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s92
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s15, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s14, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s40
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7283,6 +8474,260 @@ define <30 x i32> @bitcast_v60i16_to_v30i32(<60 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB14_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60i16_to_v30i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB14_4
+; GFX13-TRUE16-NEXT: .LBB14_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB14_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-TRUE16-NEXT: .LBB14_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60i16_to_v30i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB14_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB14_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8547,6 +9992,148 @@ define inreg <30 x i32> @bitcast_v60i16_to_v30i32_scalar(<60 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60i16_to_v30i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9579,6 +11166,260 @@ define <60 x half> @bitcast_v30i32_to_v60f16(<30 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v30i32_to_v60f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB16_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v30i32_to_v60f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB16_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v29, 3, v29 :: v_dual_add_nc_u32 v28, 3, v28
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v27, 3, v27 :: v_dual_add_nc_u32 v26, 3, v26
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v25, 3, v25 :: v_dual_add_nc_u32 v24, 3, v24
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v23, 3, v23 :: v_dual_add_nc_u32 v22, 3, v22
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v21, 3, v21 :: v_dual_add_nc_u32 v20, 3, v20
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v19, 3, v19 :: v_dual_add_nc_u32 v18, 3, v18
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v17, 3, v17 :: v_dual_add_nc_u32 v16, 3, v16
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v15, 3, v15 :: v_dual_add_nc_u32 v14, 3, v14
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v13, 3, v13 :: v_dual_add_nc_u32 v12, 3, v12
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v11, 3, v11 :: v_dual_add_nc_u32 v10, 3, v10
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v9, 3, v9 :: v_dual_add_nc_u32 v8, 3, v8
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v7, 3, v7 :: v_dual_add_nc_u32 v6, 3, v6
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v5, 3, v5 :: v_dual_add_nc_u32 v4, 3, v4
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v3, 3, v3 :: v_dual_add_nc_u32 v2, 3, v2
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v1, 3, v1 :: v_dual_add_nc_u32 v0, 3, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB16_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10635,6 +12476,209 @@ define inreg <60 x half> @bitcast_v30i32_to_v60f16_scalar(<30 x i32> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30i32_to_v60f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s94, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB17_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: s_branch .LBB17_3
+; GFX13-NEXT: .LBB17_2:
+; GFX13-NEXT: s_mov_b32 s94, -1
+; GFX13-NEXT: ; implicit-def: $sgpr93
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr91
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: .LBB17_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s4, s4, 3
+; GFX13-NEXT: s_add_co_i32 s5, s5, 3
+; GFX13-NEXT: s_add_co_i32 s6, s6, 3
+; GFX13-NEXT: s_add_co_i32 s7, s7, 3
+; GFX13-NEXT: s_add_co_i32 s8, s8, 3
+; GFX13-NEXT: s_add_co_i32 s9, s9, 3
+; GFX13-NEXT: s_add_co_i32 s10, s10, 3
+; GFX13-NEXT: s_add_co_i32 s11, s11, 3
+; GFX13-NEXT: s_add_co_i32 s12, s12, 3
+; GFX13-NEXT: s_add_co_i32 s13, s13, 3
+; GFX13-NEXT: s_add_co_i32 s14, s14, 3
+; GFX13-NEXT: s_add_co_i32 s15, s15, 3
+; GFX13-NEXT: s_add_co_i32 s29, s29, 3
+; GFX13-NEXT: s_add_co_i32 s28, s28, 3
+; GFX13-NEXT: s_add_co_i32 s27, s27, 3
+; GFX13-NEXT: s_add_co_i32 s26, s26, 3
+; GFX13-NEXT: s_add_co_i32 s25, s25, 3
+; GFX13-NEXT: s_add_co_i32 s24, s24, 3
+; GFX13-NEXT: s_add_co_i32 s23, s23, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: s_add_co_i32 s21, s21, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s19, s19, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s17, s17, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s3, s3, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: .LBB17_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s92
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s15, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s14, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s40
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12250,6 +14294,260 @@ define <30 x i32> @bitcast_v60f16_to_v30i32(<60 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB18_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60f16_to_v30i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB18_4
+; GFX13-TRUE16-NEXT: .LBB18_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB18_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-TRUE16-NEXT: .LBB18_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60f16_to_v30i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB18_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB18_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13518,6 +15816,148 @@ define inreg <30 x i32> @bitcast_v60f16_to_v30i32_scalar(<60 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60f16_to_v30i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13693,6 +16133,39 @@ define <15 x i64> @bitcast_v30f32_to_v15i64(<30 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB20_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v15i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB20_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB20_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14290,6 +16763,87 @@ define inreg <15 x i64> @bitcast_v30f32_to_v15i64_scalar(<30 x float> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v15i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB21_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB21_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14488,6 +17042,62 @@ define <30 x float> @bitcast_v15i64_to_v30f32(<15 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB22_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v30f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: .LBB22_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14870,6 +17480,72 @@ define inreg <30 x float> @bitcast_v15i64_to_v30f32_scalar(<15 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v30f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s5, v11
+; GFX13-NEXT: v_readfirstlane_b32 s4, v10
+; GFX13-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-NEXT: v_readfirstlane_b32 s6, v8
+; GFX13-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-NEXT: v_readfirstlane_b32 s11, v5
+; GFX13-NEXT: v_readfirstlane_b32 s10, v4
+; GFX13-NEXT: v_readfirstlane_b32 s13, v3
+; GFX13-NEXT: v_readfirstlane_b32 s12, v2
+; GFX13-NEXT: v_readfirstlane_b32 s15, v1
+; GFX13-NEXT: v_readfirstlane_b32 s14, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB23_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: .LBB23_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v19, s15
+; GFX13-NEXT: v_dual_mov_b32 v20, s12 :: v_dual_mov_b32 v21, s13
+; GFX13-NEXT: v_dual_mov_b32 v22, s10 :: v_dual_mov_b32 v23, s11
+; GFX13-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v25, s9
+; GFX13-NEXT: v_dual_mov_b32 v26, s6 :: v_dual_mov_b32 v27, s7
+; GFX13-NEXT: v_dual_mov_b32 v28, s4 :: v_dual_mov_b32 v29, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15045,6 +17721,39 @@ define <15 x double> @bitcast_v30f32_to_v15f64(<30 x float> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB24_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v15f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB24_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-NEXT: .LBB24_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15642,6 +18351,87 @@ define inreg <15 x double> @bitcast_v30f32_to_v15f64_scalar(<30 x float> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v15f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -15772,6 +18562,39 @@ define <30 x float> @bitcast_v15f64_to_v30f32(<15 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB26_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15f64_to_v30f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB26_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: .LBB26_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -16309,6 +19132,127 @@ define inreg <30 x float> @bitcast_v15f64_to_v30f32_scalar(<15 x double> inreg %
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15f64_to_v30f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[64:65], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: s_branch .LBB27_5
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB27_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -17311,6 +20255,260 @@ define <60 x i16> @bitcast_v30f32_to_v60i16(<30 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v30f32_to_v60i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB28_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v30f32_to_v60i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB28_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB28_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -18808,6 +22006,209 @@ define inreg <60 x i16> @bitcast_v30f32_to_v60i16_scalar(<30 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v28, v31, 16, v35
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v29, v30, 16, v36
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v60i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s94, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB29_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: s_branch .LBB29_3
+; GFX13-NEXT: .LBB29_2:
+; GFX13-NEXT: s_mov_b32 s94, -1
+; GFX13-NEXT: ; implicit-def: $sgpr93
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr91
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: .LBB29_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: .LBB29_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s92
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s15, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s14, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s40
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -20279,6 +23680,260 @@ define <30 x float> @bitcast_v60i16_to_v30f32(<60 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB30_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60i16_to_v30f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB30_4
+; GFX13-TRUE16-NEXT: .LBB30_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB30_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-TRUE16-NEXT: .LBB30_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60i16_to_v30f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB30_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB30_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -21543,6 +25198,148 @@ define inreg <30 x float> @bitcast_v60i16_to_v30f32_scalar(<60 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60i16_to_v30f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -22545,6 +26342,260 @@ define <60 x half> @bitcast_v30f32_to_v60f16(<30 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v30f32_to_v60f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB32_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v30f32_to_v60f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB32_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v29, 1.0, v29 :: v_dual_add_f32 v28, 1.0, v28
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v27, 1.0, v27 :: v_dual_add_f32 v26, 1.0, v26
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v25, 1.0, v25 :: v_dual_add_f32 v24, 1.0, v24
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v23, 1.0, v23 :: v_dual_add_f32 v22, 1.0, v22
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v21, 1.0, v21 :: v_dual_add_f32 v20, 1.0, v20
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v19, 1.0, v19 :: v_dual_add_f32 v18, 1.0, v18
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v17, 1.0, v17 :: v_dual_add_f32 v16, 1.0, v16
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v15, 1.0, v15 :: v_dual_add_f32 v14, 1.0, v14
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v13, 1.0, v13 :: v_dual_add_f32 v12, 1.0, v12
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v11, 1.0, v11 :: v_dual_add_f32 v10, 1.0, v10
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v9, 1.0, v9 :: v_dual_add_f32 v8, 1.0, v8
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v7, 1.0, v7 :: v_dual_add_f32 v6, 1.0, v6
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v5, 1.0, v5 :: v_dual_add_f32 v4, 1.0, v4
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v3, 1.0, v3 :: v_dual_add_f32 v2, 1.0, v2
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v1, 1.0, v1 :: v_dual_add_f32 v0, 1.0, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB32_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -24042,6 +28093,209 @@ define inreg <60 x half> @bitcast_v30f32_to_v60f16_scalar(<30 x float> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v28, v31, 16, v35
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v29, v30, 16, v36
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v30f32_to_v60f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s4, v11
+; GFX13-NEXT: v_readfirstlane_b32 s5, v10
+; GFX13-NEXT: v_readfirstlane_b32 s6, v9
+; GFX13-NEXT: v_readfirstlane_b32 s7, v8
+; GFX13-NEXT: v_readfirstlane_b32 s8, v7
+; GFX13-NEXT: v_readfirstlane_b32 s9, v6
+; GFX13-NEXT: v_readfirstlane_b32 s10, v5
+; GFX13-NEXT: v_readfirstlane_b32 s11, v4
+; GFX13-NEXT: v_readfirstlane_b32 s12, v3
+; GFX13-NEXT: v_readfirstlane_b32 s13, v2
+; GFX13-NEXT: v_readfirstlane_b32 s14, v1
+; GFX13-NEXT: v_readfirstlane_b32 s15, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s94, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB33_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: s_branch .LBB33_3
+; GFX13-NEXT: .LBB33_2:
+; GFX13-NEXT: s_mov_b32 s94, -1
+; GFX13-NEXT: ; implicit-def: $sgpr93
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr91
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: .LBB33_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s4, s4, 1.0
+; GFX13-NEXT: s_add_f32 s5, s5, 1.0
+; GFX13-NEXT: s_add_f32 s6, s6, 1.0
+; GFX13-NEXT: s_add_f32 s7, s7, 1.0
+; GFX13-NEXT: s_add_f32 s8, s8, 1.0
+; GFX13-NEXT: s_add_f32 s9, s9, 1.0
+; GFX13-NEXT: s_add_f32 s10, s10, 1.0
+; GFX13-NEXT: s_add_f32 s11, s11, 1.0
+; GFX13-NEXT: s_add_f32 s12, s12, 1.0
+; GFX13-NEXT: s_add_f32 s13, s13, 1.0
+; GFX13-NEXT: s_add_f32 s14, s14, 1.0
+; GFX13-NEXT: s_add_f32 s15, s15, 1.0
+; GFX13-NEXT: s_add_f32 s29, s29, 1.0
+; GFX13-NEXT: s_add_f32 s28, s28, 1.0
+; GFX13-NEXT: s_add_f32 s27, s27, 1.0
+; GFX13-NEXT: s_add_f32 s26, s26, 1.0
+; GFX13-NEXT: s_add_f32 s25, s25, 1.0
+; GFX13-NEXT: s_add_f32 s24, s24, 1.0
+; GFX13-NEXT: s_add_f32 s23, s23, 1.0
+; GFX13-NEXT: s_add_f32 s22, s22, 1.0
+; GFX13-NEXT: s_add_f32 s21, s21, 1.0
+; GFX13-NEXT: s_add_f32 s20, s20, 1.0
+; GFX13-NEXT: s_add_f32 s19, s19, 1.0
+; GFX13-NEXT: s_add_f32 s18, s18, 1.0
+; GFX13-NEXT: s_add_f32 s17, s17, 1.0
+; GFX13-NEXT: s_add_f32 s16, s16, 1.0
+; GFX13-NEXT: s_add_f32 s3, s3, 1.0
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_lshr_b32 s40, s4, 16
+; GFX13-NEXT: s_lshr_b32 s41, s5, 16
+; GFX13-NEXT: s_lshr_b32 s42, s6, 16
+; GFX13-NEXT: s_lshr_b32 s43, s7, 16
+; GFX13-NEXT: s_lshr_b32 s44, s8, 16
+; GFX13-NEXT: s_lshr_b32 s45, s9, 16
+; GFX13-NEXT: s_lshr_b32 s46, s10, 16
+; GFX13-NEXT: s_lshr_b32 s47, s11, 16
+; GFX13-NEXT: s_lshr_b32 s56, s12, 16
+; GFX13-NEXT: s_lshr_b32 s57, s13, 16
+; GFX13-NEXT: s_lshr_b32 s58, s14, 16
+; GFX13-NEXT: s_lshr_b32 s59, s15, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: .LBB33_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s92
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s15, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s14, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s40
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s15 :: v_dual_mov_b32 v19, s14
+; GFX13-NEXT: v_dual_mov_b32 v20, s13 :: v_dual_mov_b32 v21, s12
+; GFX13-NEXT: v_dual_mov_b32 v22, s11 :: v_dual_mov_b32 v23, s10
+; GFX13-NEXT: v_dual_mov_b32 v24, s9 :: v_dual_mov_b32 v25, s8
+; GFX13-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
+; GFX13-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -25657,6 +29911,260 @@ define <30 x float> @bitcast_v60f16_to_v30f32(<60 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB34_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60f16_to_v30f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB34_4
+; GFX13-TRUE16-NEXT: .LBB34_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB34_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-TRUE16-NEXT: .LBB34_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60f16_to_v30f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB34_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB34_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -26925,6 +31433,148 @@ define inreg <30 x float> @bitcast_v60f16_to_v30f32_scalar(<60 x half> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60f16_to_v30f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27123,6 +31773,62 @@ define <15 x double> @bitcast_v15i64_to_v15f64(<15 x i64> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB36_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v15f64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-NEXT: .LBB36_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27504,6 +32210,71 @@ define inreg <15 x double> @bitcast_v15i64_to_v15f64_scalar(<15 x i64> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v15f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s5, v11
+; GFX13-NEXT: v_readfirstlane_b32 s4, v10
+; GFX13-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-NEXT: v_readfirstlane_b32 s6, v8
+; GFX13-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-NEXT: v_readfirstlane_b32 s11, v5
+; GFX13-NEXT: v_readfirstlane_b32 s10, v4
+; GFX13-NEXT: v_readfirstlane_b32 s13, v3
+; GFX13-NEXT: v_readfirstlane_b32 s12, v2
+; GFX13-NEXT: v_readfirstlane_b32 s15, v1
+; GFX13-NEXT: v_readfirstlane_b32 s14, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB37_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: .LBB37_4: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v19, s15
+; GFX13-NEXT: v_dual_mov_b32 v20, s12 :: v_dual_mov_b32 v21, s13
+; GFX13-NEXT: v_dual_mov_b32 v22, s10 :: v_dual_mov_b32 v23, s11
+; GFX13-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v25, s9
+; GFX13-NEXT: v_dual_mov_b32 v26, s6 :: v_dual_mov_b32 v27, s7
+; GFX13-NEXT: v_dual_mov_b32 v28, s4 :: v_dual_mov_b32 v29, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -27634,6 +32405,39 @@ define <15 x i64> @bitcast_v15f64_to_v15i64(<15 x double> %a, i32 %b) #0 {
; GFX11-NEXT: .LBB38_2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15f64_to_v15i64:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: s_cbranch_execz .LBB38_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-NEXT: .LBB38_2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -28171,6 +32975,127 @@ define inreg <15 x i64> @bitcast_v15f64_to_v15i64_scalar(<15 x double> inreg %a,
; GFX11-NEXT: s_mov_b32 exec_lo, s0
; GFX11-NEXT: s_waitcnt vmcnt(0)
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15f64_to_v15i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_xor_saveexec_b32 s4, -1
+; GFX13-NEXT: scratch_store_b32 off, v32, s32 nv ; 4-byte Folded Spill
+; GFX13-NEXT: s_mov_b32 exec_lo, s4
+; GFX13-NEXT: v_writelane_b32 v32, s36, 0
+; GFX13-NEXT: v_writelane_b32 v32, s37, 1
+; GFX13-NEXT: v_writelane_b32 v32, s38, 2
+; GFX13-NEXT: v_writelane_b32 v32, s39, 3
+; GFX13-NEXT: v_writelane_b32 v32, s48, 4
+; GFX13-NEXT: v_writelane_b32 v32, s49, 5
+; GFX13-NEXT: v_writelane_b32 v32, s50, 6
+; GFX13-NEXT: v_writelane_b32 v32, s51, 7
+; GFX13-NEXT: v_writelane_b32 v32, s52, 8
+; GFX13-NEXT: v_writelane_b32 v32, s53, 9
+; GFX13-NEXT: v_writelane_b32 v32, s54, 10
+; GFX13-NEXT: v_writelane_b32 v32, s55, 11
+; GFX13-NEXT: v_writelane_b32 v32, s64, 12
+; GFX13-NEXT: v_writelane_b32 v32, s65, 13
+; GFX13-NEXT: s_mov_b32 s36, s0
+; GFX13-NEXT: v_readfirstlane_b32 s0, v12
+; GFX13-NEXT: v_readfirstlane_b32 s65, v11
+; GFX13-NEXT: v_readfirstlane_b32 s64, v10
+; GFX13-NEXT: v_readfirstlane_b32 s63, v9
+; GFX13-NEXT: v_readfirstlane_b32 s62, v8
+; GFX13-NEXT: v_readfirstlane_b32 s61, v7
+; GFX13-NEXT: v_readfirstlane_b32 s60, v6
+; GFX13-NEXT: v_readfirstlane_b32 s59, v5
+; GFX13-NEXT: v_readfirstlane_b32 s58, v4
+; GFX13-NEXT: v_readfirstlane_b32 s57, v3
+; GFX13-NEXT: v_readfirstlane_b32 s56, v2
+; GFX13-NEXT: v_readfirstlane_b32 s55, v1
+; GFX13-NEXT: v_readfirstlane_b32 s54, v0
+; GFX13-NEXT: s_mov_b32 s53, s29
+; GFX13-NEXT: s_mov_b32 s52, s28
+; GFX13-NEXT: s_mov_b32 s51, s27
+; GFX13-NEXT: s_mov_b32 s50, s26
+; GFX13-NEXT: s_mov_b32 s49, s25
+; GFX13-NEXT: s_mov_b32 s48, s24
+; GFX13-NEXT: s_mov_b32 s47, s23
+; GFX13-NEXT: s_mov_b32 s46, s22
+; GFX13-NEXT: s_mov_b32 s45, s21
+; GFX13-NEXT: s_mov_b32 s44, s20
+; GFX13-NEXT: s_mov_b32 s43, s19
+; GFX13-NEXT: s_mov_b32 s42, s18
+; GFX13-NEXT: s_mov_b32 s41, s17
+; GFX13-NEXT: s_mov_b32 s40, s16
+; GFX13-NEXT: s_mov_b32 s39, s3
+; GFX13-NEXT: s_mov_b32 s38, s2
+; GFX13-NEXT: s_mov_b32 s37, s1
+; GFX13-NEXT: s_cmp_lg_u32 s0, 0
+; GFX13-NEXT: s_mov_b32 s0, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s0, -1
+; GFX13-NEXT: .LBB39_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s0, s0, exec_lo
+; GFX13-NEXT: s_cselect_b32 s0, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s0, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_add_f64_e64 v[0:1], s[36:37], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[2:3], s[38:39], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[4:5], s[40:41], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[6:7], s[42:43], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[8:9], s[44:45], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[10:11], s[46:47], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[12:13], s[48:49], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[14:15], s[50:51], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[16:17], s[52:53], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[18:19], s[54:55], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[20:21], s[56:57], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[22:23], s[58:59], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[24:25], s[60:61], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[26:27], s[62:63], 1.0
+; GFX13-NEXT: v_add_f64_e64 v[28:29], s[64:65], 1.0
+; GFX13-NEXT: s_branch .LBB39_5
+; GFX13-NEXT: .LBB39_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s36 :: v_dual_mov_b32 v1, s37
+; GFX13-NEXT: v_dual_mov_b32 v2, s38 :: v_dual_mov_b32 v3, s39
+; GFX13-NEXT: v_dual_mov_b32 v4, s40 :: v_dual_mov_b32 v5, s41
+; GFX13-NEXT: v_dual_mov_b32 v6, s42 :: v_dual_mov_b32 v7, s43
+; GFX13-NEXT: v_dual_mov_b32 v8, s44 :: v_dual_mov_b32 v9, s45
+; GFX13-NEXT: v_dual_mov_b32 v10, s46 :: v_dual_mov_b32 v11, s47
+; GFX13-NEXT: v_dual_mov_b32 v12, s48 :: v_dual_mov_b32 v13, s49
+; GFX13-NEXT: v_dual_mov_b32 v14, s50 :: v_dual_mov_b32 v15, s51
+; GFX13-NEXT: v_dual_mov_b32 v16, s52 :: v_dual_mov_b32 v17, s53
+; GFX13-NEXT: v_dual_mov_b32 v18, s54 :: v_dual_mov_b32 v19, s55
+; GFX13-NEXT: v_dual_mov_b32 v20, s56 :: v_dual_mov_b32 v21, s57
+; GFX13-NEXT: v_dual_mov_b32 v22, s58 :: v_dual_mov_b32 v23, s59
+; GFX13-NEXT: v_dual_mov_b32 v24, s60 :: v_dual_mov_b32 v25, s61
+; GFX13-NEXT: v_dual_mov_b32 v26, s62 :: v_dual_mov_b32 v27, s63
+; GFX13-NEXT: v_dual_mov_b32 v28, s64 :: v_dual_mov_b32 v29, s65
+; GFX13-NEXT: v_dual_mov_b32 v30, s66 :: v_dual_mov_b32 v31, s67
+; GFX13-NEXT: .LBB39_5: ; %end
+; GFX13-NEXT: v_readlane_b32 s65, v32, 13
+; GFX13-NEXT: v_readlane_b32 s64, v32, 12
+; GFX13-NEXT: v_readlane_b32 s55, v32, 11
+; GFX13-NEXT: v_readlane_b32 s54, v32, 10
+; GFX13-NEXT: v_readlane_b32 s53, v32, 9
+; GFX13-NEXT: v_readlane_b32 s52, v32, 8
+; GFX13-NEXT: v_readlane_b32 s51, v32, 7
+; GFX13-NEXT: v_readlane_b32 s50, v32, 6
+; GFX13-NEXT: v_readlane_b32 s49, v32, 5
+; GFX13-NEXT: v_readlane_b32 s48, v32, 4
+; GFX13-NEXT: v_readlane_b32 s39, v32, 3
+; GFX13-NEXT: v_readlane_b32 s38, v32, 2
+; GFX13-NEXT: v_readlane_b32 s37, v32, 1
+; GFX13-NEXT: v_readlane_b32 s36, v32, 0
+; GFX13-NEXT: s_xor_saveexec_b32 s0, -1
+; GFX13-NEXT: scratch_load_b32 v32, off, s32 nv ; 4-byte Folded Reload
+; GFX13-NEXT: s_mov_b32 exec_lo, s0
+; GFX13-NEXT: s_wait_loadcnt 0x0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -29219,6 +34144,306 @@ define <60 x i16> @bitcast_v15i64_to_v60i16(<15 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v15i64_to_v60i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v15i64_to_v60i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -30275,6 +35500,194 @@ define inreg <60 x i16> @bitcast_v15i64_to_v60i16_scalar(<15 x i64> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v60i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s5, v11
+; GFX13-NEXT: v_readfirstlane_b32 s4, v10
+; GFX13-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-NEXT: v_readfirstlane_b32 s6, v8
+; GFX13-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-NEXT: v_readfirstlane_b32 s11, v5
+; GFX13-NEXT: v_readfirstlane_b32 s10, v4
+; GFX13-NEXT: v_readfirstlane_b32 s13, v3
+; GFX13-NEXT: v_readfirstlane_b32 s12, v2
+; GFX13-NEXT: v_readfirstlane_b32 s15, v1
+; GFX13-NEXT: v_readfirstlane_b32 s14, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s94, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s40, s5, 16
+; GFX13-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-NEXT: s_lshr_b32 s42, s7, 16
+; GFX13-NEXT: s_lshr_b32 s43, s6, 16
+; GFX13-NEXT: s_lshr_b32 s44, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s8, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 16
+; GFX13-NEXT: s_lshr_b32 s47, s10, 16
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s57, s12, 16
+; GFX13-NEXT: s_lshr_b32 s58, s15, 16
+; GFX13-NEXT: s_lshr_b32 s59, s14, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s94, -1
+; GFX13-NEXT: ; implicit-def: $sgpr93
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr91
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s40, s5, 16
+; GFX13-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-NEXT: s_lshr_b32 s42, s7, 16
+; GFX13-NEXT: s_lshr_b32 s43, s6, 16
+; GFX13-NEXT: s_lshr_b32 s44, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s8, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 16
+; GFX13-NEXT: s_lshr_b32 s47, s10, 16
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s57, s12, 16
+; GFX13-NEXT: s_lshr_b32 s58, s15, 16
+; GFX13-NEXT: s_lshr_b32 s59, s14, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s92
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s14, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s15, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s40
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v19, s15
+; GFX13-NEXT: v_dual_mov_b32 v20, s12 :: v_dual_mov_b32 v21, s13
+; GFX13-NEXT: v_dual_mov_b32 v22, s10 :: v_dual_mov_b32 v23, s11
+; GFX13-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v25, s9
+; GFX13-NEXT: v_dual_mov_b32 v26, s6 :: v_dual_mov_b32 v27, s7
+; GFX13-NEXT: v_dual_mov_b32 v28, s4 :: v_dual_mov_b32 v29, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -31746,6 +37159,260 @@ define <15 x i64> @bitcast_v60i16_to_v15i64(<60 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB42_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60i16_to_v15i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB42_4
+; GFX13-TRUE16-NEXT: .LBB42_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB42_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60i16_to_v15i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB42_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -33010,6 +38677,148 @@ define inreg <15 x i64> @bitcast_v60i16_to_v15i64_scalar(<60 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60i16_to_v15i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB43_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB43_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -34058,6 +39867,306 @@ define <60 x half> @bitcast_v15i64_to_v60f16(<15 x i64> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v15i64_to_v60f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v15i64_to_v60f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_co_u32 v28, vcc_lo, v28, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v29, null, 0, v29, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v26, vcc_lo, v26, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v27, null, 0, v27, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v24, vcc_lo, v24, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v25, null, 0, v25, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v22, vcc_lo, v22, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v23, null, 0, v23, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v20, vcc_lo, v20, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v21, null, 0, v21, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v18, vcc_lo, v18, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v19, null, 0, v19, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v16, vcc_lo, v16, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v17, null, 0, v17, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v14, vcc_lo, v14, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v15, null, 0, v15, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v12, vcc_lo, v12, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v13, null, 0, v13, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v10, vcc_lo, v10, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v11, null, 0, v11, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v8, vcc_lo, v8, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v9, null, 0, v9, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v6, vcc_lo, v6, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v7, null, 0, v7, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, v4, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, 0, v5, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v2, vcc_lo, v2, 3
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo
+; GFX13-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, v0, 3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -35114,6 +41223,194 @@ define inreg <60 x half> @bitcast_v15i64_to_v60f16_scalar(<15 x i64> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v26, s7 :: v_dual_mov_b32 v27, s6
; GFX11-NEXT: v_dual_mov_b32 v28, s5 :: v_dual_mov_b32 v29, s4
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v15i64_to_v60f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-NEXT: v_readfirstlane_b32 s5, v11
+; GFX13-NEXT: v_readfirstlane_b32 s4, v10
+; GFX13-NEXT: v_readfirstlane_b32 s7, v9
+; GFX13-NEXT: v_readfirstlane_b32 s6, v8
+; GFX13-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-NEXT: v_readfirstlane_b32 s11, v5
+; GFX13-NEXT: v_readfirstlane_b32 s10, v4
+; GFX13-NEXT: v_readfirstlane_b32 s13, v3
+; GFX13-NEXT: v_readfirstlane_b32 s12, v2
+; GFX13-NEXT: v_readfirstlane_b32 s15, v1
+; GFX13-NEXT: v_readfirstlane_b32 s14, v0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-NEXT: s_mov_b32 s94, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s40, s5, 16
+; GFX13-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-NEXT: s_lshr_b32 s42, s7, 16
+; GFX13-NEXT: s_lshr_b32 s43, s6, 16
+; GFX13-NEXT: s_lshr_b32 s44, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s8, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 16
+; GFX13-NEXT: s_lshr_b32 s47, s10, 16
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s57, s12, 16
+; GFX13-NEXT: s_lshr_b32 s58, s15, 16
+; GFX13-NEXT: s_lshr_b32 s59, s14, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s94, -1
+; GFX13-NEXT: ; implicit-def: $sgpr93
+; GFX13-NEXT: ; implicit-def: $sgpr92
+; GFX13-NEXT: ; implicit-def: $sgpr91
+; GFX13-NEXT: ; implicit-def: $sgpr90
+; GFX13-NEXT: ; implicit-def: $sgpr89
+; GFX13-NEXT: ; implicit-def: $sgpr88
+; GFX13-NEXT: ; implicit-def: $sgpr79
+; GFX13-NEXT: ; implicit-def: $sgpr78
+; GFX13-NEXT: ; implicit-def: $sgpr77
+; GFX13-NEXT: ; implicit-def: $sgpr76
+; GFX13-NEXT: ; implicit-def: $sgpr75
+; GFX13-NEXT: ; implicit-def: $sgpr74
+; GFX13-NEXT: ; implicit-def: $sgpr73
+; GFX13-NEXT: ; implicit-def: $sgpr72
+; GFX13-NEXT: ; implicit-def: $sgpr63
+; GFX13-NEXT: ; implicit-def: $sgpr62
+; GFX13-NEXT: ; implicit-def: $sgpr61
+; GFX13-NEXT: ; implicit-def: $sgpr60
+; GFX13-NEXT: ; implicit-def: $sgpr59
+; GFX13-NEXT: ; implicit-def: $sgpr58
+; GFX13-NEXT: ; implicit-def: $sgpr57
+; GFX13-NEXT: ; implicit-def: $sgpr56
+; GFX13-NEXT: ; implicit-def: $sgpr47
+; GFX13-NEXT: ; implicit-def: $sgpr46
+; GFX13-NEXT: ; implicit-def: $sgpr45
+; GFX13-NEXT: ; implicit-def: $sgpr44
+; GFX13-NEXT: ; implicit-def: $sgpr43
+; GFX13-NEXT: ; implicit-def: $sgpr42
+; GFX13-NEXT: ; implicit-def: $sgpr41
+; GFX13-NEXT: ; implicit-def: $sgpr40
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_nc_u64 s[4:5], s[4:5], 3
+; GFX13-NEXT: s_add_nc_u64 s[6:7], s[6:7], 3
+; GFX13-NEXT: s_add_nc_u64 s[8:9], s[8:9], 3
+; GFX13-NEXT: s_add_nc_u64 s[10:11], s[10:11], 3
+; GFX13-NEXT: s_add_nc_u64 s[12:13], s[12:13], 3
+; GFX13-NEXT: s_add_nc_u64 s[14:15], s[14:15], 3
+; GFX13-NEXT: s_add_nc_u64 s[28:29], s[28:29], 3
+; GFX13-NEXT: s_add_nc_u64 s[26:27], s[26:27], 3
+; GFX13-NEXT: s_add_nc_u64 s[24:25], s[24:25], 3
+; GFX13-NEXT: s_add_nc_u64 s[22:23], s[22:23], 3
+; GFX13-NEXT: s_add_nc_u64 s[20:21], s[20:21], 3
+; GFX13-NEXT: s_add_nc_u64 s[18:19], s[18:19], 3
+; GFX13-NEXT: s_add_nc_u64 s[16:17], s[16:17], 3
+; GFX13-NEXT: s_add_nc_u64 s[2:3], s[2:3], 3
+; GFX13-NEXT: s_add_nc_u64 s[0:1], s[0:1], 3
+; GFX13-NEXT: s_lshr_b32 s40, s5, 16
+; GFX13-NEXT: s_lshr_b32 s41, s4, 16
+; GFX13-NEXT: s_lshr_b32 s42, s7, 16
+; GFX13-NEXT: s_lshr_b32 s43, s6, 16
+; GFX13-NEXT: s_lshr_b32 s44, s9, 16
+; GFX13-NEXT: s_lshr_b32 s45, s8, 16
+; GFX13-NEXT: s_lshr_b32 s46, s11, 16
+; GFX13-NEXT: s_lshr_b32 s47, s10, 16
+; GFX13-NEXT: s_lshr_b32 s56, s13, 16
+; GFX13-NEXT: s_lshr_b32 s57, s12, 16
+; GFX13-NEXT: s_lshr_b32 s58, s15, 16
+; GFX13-NEXT: s_lshr_b32 s59, s14, 16
+; GFX13-NEXT: s_lshr_b32 s60, s29, 16
+; GFX13-NEXT: s_lshr_b32 s61, s28, 16
+; GFX13-NEXT: s_lshr_b32 s62, s27, 16
+; GFX13-NEXT: s_lshr_b32 s63, s26, 16
+; GFX13-NEXT: s_lshr_b32 s72, s25, 16
+; GFX13-NEXT: s_lshr_b32 s73, s24, 16
+; GFX13-NEXT: s_lshr_b32 s74, s23, 16
+; GFX13-NEXT: s_lshr_b32 s75, s22, 16
+; GFX13-NEXT: s_lshr_b32 s76, s21, 16
+; GFX13-NEXT: s_lshr_b32 s77, s20, 16
+; GFX13-NEXT: s_lshr_b32 s78, s19, 16
+; GFX13-NEXT: s_lshr_b32 s79, s18, 16
+; GFX13-NEXT: s_lshr_b32 s88, s17, 16
+; GFX13-NEXT: s_lshr_b32 s89, s16, 16
+; GFX13-NEXT: s_lshr_b32 s90, s3, 16
+; GFX13-NEXT: s_lshr_b32 s91, s2, 16
+; GFX13-NEXT: s_lshr_b32 s92, s1, 16
+; GFX13-NEXT: s_lshr_b32 s93, s0, 16
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s92
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s90
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s16, s89
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s17, s88
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s18, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s19, s78
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s20, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s21, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s22, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s23, s74
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s24, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s25, s72
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s26, s63
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s27, s62
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s28, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s29, s60
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s14, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s15, s58
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s12, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s13, s56
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s10, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s11, s46
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s8, s45
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s9, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s6, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s7, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s4, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s5, s40
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v5, s17
+; GFX13-NEXT: v_dual_mov_b32 v6, s18 :: v_dual_mov_b32 v7, s19
+; GFX13-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v9, s21
+; GFX13-NEXT: v_dual_mov_b32 v10, s22 :: v_dual_mov_b32 v11, s23
+; GFX13-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v13, s25
+; GFX13-NEXT: v_dual_mov_b32 v14, s26 :: v_dual_mov_b32 v15, s27
+; GFX13-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v17, s29
+; GFX13-NEXT: v_dual_mov_b32 v18, s14 :: v_dual_mov_b32 v19, s15
+; GFX13-NEXT: v_dual_mov_b32 v20, s12 :: v_dual_mov_b32 v21, s13
+; GFX13-NEXT: v_dual_mov_b32 v22, s10 :: v_dual_mov_b32 v23, s11
+; GFX13-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v25, s9
+; GFX13-NEXT: v_dual_mov_b32 v26, s6 :: v_dual_mov_b32 v27, s7
+; GFX13-NEXT: v_dual_mov_b32 v28, s4 :: v_dual_mov_b32 v29, s5
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -36729,6 +43026,260 @@ define <15 x i64> @bitcast_v60f16_to_v15i64(<60 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB46_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60f16_to_v15i64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB46_4
+; GFX13-TRUE16-NEXT: .LBB46_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB46_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60f16_to_v15i64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB46_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -37997,6 +44548,148 @@ define inreg <15 x i64> @bitcast_v60f16_to_v15i64_scalar(<60 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60f16_to_v15i64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB47_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB47_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -38954,6 +45647,260 @@ define <60 x i16> @bitcast_v15f64_to_v60i16(<15 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v15f64_to_v60i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB48_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v15f64_to_v60i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB48_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB48_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -40383,6 +47330,415 @@ define inreg <60 x i16> @bitcast_v15f64_to_v60i16_scalar(<15 x double> inreg %a,
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v28, v35, 16, v30
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v29, v37, 16, v31
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v15f64_to_v60i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s15, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s14, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s11, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s10, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s75, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s76, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s77, s12, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s78, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s79, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s88, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s89, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s90, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s91, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s92, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s93, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s94, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB49_3
+; GFX13-TRUE16-NEXT: .LBB49_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr94
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr93
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr92
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr91
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[28:29], s[14:15], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[26:27], s[10:11], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[24:25], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[12:13], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v29 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v27 :: v_dual_lshrrev_b32 v31, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB49_6
+; GFX13-TRUE16-NEXT: .LBB49_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v26, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s14 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s13 :: v_dual_mov_b32 v21, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s7 :: v_dual_mov_b32 v25, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v27, s11 :: v_dual_mov_b32 v29, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v80, s94 :: v_dual_mov_b32 v70, s93
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s92 :: v_dual_mov_b32 v66, s91
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s90 :: v_dual_mov_b32 v54, s89
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s88 :: v_dual_mov_b32 v50, s79
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s78 :: v_dual_mov_b32 v38, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s76 :: v_dual_mov_b32 v34, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s74 :: v_dual_mov_b32 v31, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s72 :: v_dual_mov_b32 v83, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v82, s62 :: v_dual_mov_b32 v81, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v71, s60 :: v_dual_mov_b32 v69, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v67, s58 :: v_dual_mov_b32 v65, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v55, s56 :: v_dual_mov_b32 v53, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v51, s46 :: v_dual_mov_b32 v49, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v39, s44 :: v_dual_mov_b32 v37, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v35, s41 :: v_dual_mov_b32 v33, s40
+; GFX13-TRUE16-NEXT: .LBB49_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v33.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v15f64_to_v60i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB49_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s15, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s14, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s11, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s10, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s75, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s76, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s77, s12, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s78, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s79, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s88, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s89, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s90, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s91, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s92, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s93, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s94, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB49_3
+; GFX13-FAKE16-NEXT: .LBB49_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: .LBB49_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB49_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[14:15], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[27:28], s[10:11], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[29:30], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[20:21], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[22:23], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[12:13], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[31:32], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[12:13], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[7:8], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[33:34], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v26 :: v_dual_lshrrev_b32 v35, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v28 :: v_dual_lshrrev_b32 v36, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v30 :: v_dual_lshrrev_b32 v24, 16, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v23 :: v_dual_lshrrev_b32 v49, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v16 :: v_dual_lshrrev_b32 v19, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v18 :: v_dual_lshrrev_b32 v52, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v32 :: v_dual_lshrrev_b32 v14, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v11 :: v_dual_lshrrev_b32 v55, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v13 :: v_dual_lshrrev_b32 v65, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v6 :: v_dual_lshrrev_b32 v9, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v8 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v34 :: v_dual_lshrrev_b32 v4, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: s_branch .LBB49_6
+; GFX13-FAKE16-NEXT: .LBB49_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, s16 :: v_dual_mov_b32 v7, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s20 :: v_dual_mov_b32 v12, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s24 :: v_dual_mov_b32 v31, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s28 :: v_dual_mov_b32 v15, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v20, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s8 :: v_dual_mov_b32 v27, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s14 :: v_dual_mov_b32 v3, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v34, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, s19 :: v_dual_mov_b32 v6, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s23 :: v_dual_mov_b32 v11, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s27 :: v_dual_mov_b32 v18, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v23, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s7 :: v_dual_mov_b32 v30, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v26, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v81, s94 :: v_dual_mov_b32 v71, s93
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s92 :: v_dual_mov_b32 v68, s91
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s90 :: v_dual_mov_b32 v65, s89
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, s88 :: v_dual_mov_b32 v14, s79
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s78 :: v_dual_mov_b32 v19, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s76 :: v_dual_mov_b32 v39, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s74 :: v_dual_mov_b32 v36, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s72 :: v_dual_mov_b32 v83, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, s62 :: v_dual_mov_b32 v80, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, s60 :: v_dual_mov_b32 v69, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v67, s58 :: v_dual_mov_b32 v66, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s56 :: v_dual_mov_b32 v54, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, s46 :: v_dual_mov_b32 v51, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s44 :: v_dual_mov_b32 v48, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s41 :: v_dual_mov_b32 v37, s40
+; GFX13-FAKE16-NEXT: .LBB49_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v84, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v4, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v14, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v80, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v64, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v85, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v81, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v71, 16, v84
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v71, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v68, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v70, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v9, 16, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v65, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v55, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v52, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v54, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v19, 16, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v49, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v39, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v24, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v83, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v82, 16, v85
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v69, 16, v71
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v67, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v66, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v53, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v51, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v50, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v48, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v36, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v38, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v35, 16, v30
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v37, 16, v31
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -41854,6 +49210,260 @@ define <15 x double> @bitcast_v60i16_to_v15f64(<60 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB50_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60i16_to_v15f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB50_4
+; GFX13-TRUE16-NEXT: .LBB50_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB50_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-TRUE16-NEXT: .LBB50_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60i16_to_v15f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB50_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: .LBB50_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -43118,6 +50728,148 @@ define inreg <15 x double> @bitcast_v60i16_to_v15f64_scalar(<60 x i16> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60i16_to_v15f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v4, s4, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v5, s5, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v6, s6, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v7, s7, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s8, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v10, s10, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v11, s11, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v12, s12, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s13, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v15, s15, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v16, s16, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v17, s17, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v18, s18, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v19, s19, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v20, s20, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v21, s21, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v22, s22, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v23, s23, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v24, s24, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v25, s25, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v26, s26, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v27, s27, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v28, s28, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v29, s29, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -44075,6 +51827,260 @@ define <60 x half> @bitcast_v15f64_to_v60f16(<15 x double> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v15f64_to_v60f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr30_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-TRUE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-TRUE16-NEXT: .LBB52_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v15f64_to_v60f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr83
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr82
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr81
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr80
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr71
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr70
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr69
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr68
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr67
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr66
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr65
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr64
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr55
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr54
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr53
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr52
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr51
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr50
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr49
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr48
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr39
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr38
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr37
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr36
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr35
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr34
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr33
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr32
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr31
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr30
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB52_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[28:29], 1.0, v[28:29]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[26:27], 1.0, v[26:27]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[24:25], 1.0, v[24:25]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[22:23], 1.0, v[22:23]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[20:21], 1.0, v[20:21]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[18:19], 1.0, v[18:19]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[16:17], 1.0, v[16:17]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[14:15], 1.0, v[14:15]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[12:13], 1.0, v[12:13]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[10:11], 1.0, v[10:11]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[8:9], 1.0, v[8:9]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[6:7], 1.0, v[6:7]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[4:5], 1.0, v[4:5]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[2:3], 1.0, v[2:3]
+; GFX13-FAKE16-NEXT: v_add_f64_e32 v[0:1], 1.0, v[0:1]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v30, 16, v29 :: v_dual_lshrrev_b32 v31, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v27 :: v_dual_lshrrev_b32 v33, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v25 :: v_dual_lshrrev_b32 v35, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v23 :: v_dual_lshrrev_b32 v37, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v19 :: v_dual_lshrrev_b32 v49, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v17 :: v_dual_lshrrev_b32 v51, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v13 :: v_dual_lshrrev_b32 v55, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v11 :: v_dual_lshrrev_b32 v65, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v9 :: v_dual_lshrrev_b32 v67, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v7 :: v_dual_lshrrev_b32 v69, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v5 :: v_dual_lshrrev_b32 v71, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v83, 16, v0
+; GFX13-FAKE16-NEXT: .LBB52_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v83, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v81, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v80, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v71, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v70, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v69, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v68, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v67, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v66, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v65, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v64, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v55, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v54, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v52, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v51, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v50, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v49, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v48, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v39, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v38, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v37, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v36, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v35, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v34, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v33, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v32, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v31, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v30, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -45504,6 +53510,415 @@ define inreg <60 x half> @bitcast_v15f64_to_v60f16_scalar(<15 x double> inreg %a
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v28, v35, 16, v30
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v29, v37, 16, v31
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v15f64_to_v60f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s15, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s15, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s14, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s11, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s10, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s74, s8, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s7, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s75, s6, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s5, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s76, s4, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s77, s12, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s78, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s79, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s88, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s89, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s90, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s91, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s92, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s93, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s94, s0, 16
+; GFX13-TRUE16-NEXT: s_branch .LBB53_3
+; GFX13-TRUE16-NEXT: .LBB53_2:
+; GFX13-TRUE16-NEXT: s_mov_b32 s42, -1
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr94
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr93
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr92
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr91
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-TRUE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-TRUE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-TRUE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[28:29], s[14:15], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[26:27], s[10:11], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[24:25], s[8:9], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[22:23], s[6:7], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[20:21], s[4:5], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[18:19], s[12:13], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[16:17], s[28:29], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[14:15], s[26:27], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[12:13], s[24:25], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[10:11], s[22:23], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[8:9], s[20:21], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[6:7], s[18:19], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[4:5], s[16:17], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[2:3], s[2:3], 1.0
+; GFX13-TRUE16-NEXT: v_add_f64_e64 v[0:1], s[0:1], 1.0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v29 :: v_dual_lshrrev_b32 v30, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v27 :: v_dual_lshrrev_b32 v31, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v25 :: v_dual_lshrrev_b32 v32, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v23 :: v_dual_lshrrev_b32 v34, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v21 :: v_dual_lshrrev_b32 v36, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v19 :: v_dual_lshrrev_b32 v38, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v17 :: v_dual_lshrrev_b32 v48, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v15 :: v_dual_lshrrev_b32 v50, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v13 :: v_dual_lshrrev_b32 v52, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v11 :: v_dual_lshrrev_b32 v54, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v9 :: v_dual_lshrrev_b32 v64, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v7 :: v_dual_lshrrev_b32 v66, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v5 :: v_dual_lshrrev_b32 v68, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v3 :: v_dual_lshrrev_b32 v70, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v80, 16, v0
+; GFX13-TRUE16-NEXT: s_branch .LBB53_6
+; GFX13-TRUE16-NEXT: .LBB53_5:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v4, s16 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, s20 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, s24 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v16, s28 :: v_dual_mov_b32 v18, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v20, s4 :: v_dual_mov_b32 v22, s6
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v24, s8 :: v_dual_mov_b32 v26, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v28, s14 :: v_dual_mov_b32 v1, s1
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v5, s17
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v9, s21
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v13, s25
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v17, s29
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s13 :: v_dual_mov_b32 v21, s5
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s7 :: v_dual_mov_b32 v25, s9
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v27, s11 :: v_dual_mov_b32 v29, s15
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v80, s94 :: v_dual_mov_b32 v70, s93
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s92 :: v_dual_mov_b32 v66, s91
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s90 :: v_dual_mov_b32 v54, s89
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s88 :: v_dual_mov_b32 v50, s79
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s78 :: v_dual_mov_b32 v38, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s76 :: v_dual_mov_b32 v34, s75
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s74 :: v_dual_mov_b32 v31, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s72 :: v_dual_mov_b32 v83, s63
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v82, s62 :: v_dual_mov_b32 v81, s61
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v71, s60 :: v_dual_mov_b32 v69, s59
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v67, s58 :: v_dual_mov_b32 v65, s57
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v55, s56 :: v_dual_mov_b32 v53, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v51, s46 :: v_dual_mov_b32 v49, s45
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v39, s44 :: v_dual_mov_b32 v37, s43
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v35, s41 :: v_dual_mov_b32 v33, s40
+; GFX13-TRUE16-NEXT: .LBB53_6: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v30.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v33.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v15f64_to_v60f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s40, v12
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s15, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s14, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s11, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s10, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s9, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s8, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s7, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s6, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s5, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s4, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s13, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s12, v0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s40, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc0 .LBB53_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s15, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s14, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s11, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s10, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s9, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s74, s8, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s7, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s75, s6, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s5, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s76, s4, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s13, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s77, s12, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s78, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s79, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s88, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s89, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s90, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s91, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s92, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s93, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s94, s0, 16
+; GFX13-FAKE16-NEXT: s_branch .LBB53_3
+; GFX13-FAKE16-NEXT: .LBB53_2:
+; GFX13-FAKE16-NEXT: s_mov_b32 s42, -1
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr94
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr63
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr93
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr62
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr92
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr61
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr91
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr60
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr90
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr59
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr89
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr58
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr88
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr57
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr79
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr56
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr78
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr47
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr77
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr46
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr76
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr45
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr75
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr44
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr74
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr43
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr73
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr41
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr72
+; GFX13-FAKE16-NEXT: ; implicit-def: $sgpr40
+; GFX13-FAKE16-NEXT: .LBB53_3: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s42, s42, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s42, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s42, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB53_5
+; GFX13-FAKE16-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[25:26], s[14:15], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[27:28], s[10:11], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[29:30], s[8:9], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[20:21], s[6:7], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[22:23], s[4:5], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[15:16], s[12:13], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[17:18], s[28:29], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[31:32], s[26:27], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[10:11], s[24:25], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[12:13], s[22:23], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[5:6], s[20:21], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[7:8], s[18:19], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[33:34], s[16:17], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[0:1], s[2:3], 1.0
+; GFX13-FAKE16-NEXT: v_add_f64_e64 v[2:3], s[0:1], 1.0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v26 :: v_dual_lshrrev_b32 v35, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v28 :: v_dual_lshrrev_b32 v36, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v30 :: v_dual_lshrrev_b32 v24, 16, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v21 :: v_dual_lshrrev_b32 v39, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v23 :: v_dual_lshrrev_b32 v49, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v16 :: v_dual_lshrrev_b32 v19, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v18 :: v_dual_lshrrev_b32 v52, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v32 :: v_dual_lshrrev_b32 v14, 16, v31
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v11 :: v_dual_lshrrev_b32 v55, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v13 :: v_dual_lshrrev_b32 v65, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v6 :: v_dual_lshrrev_b32 v9, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v8 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v34 :: v_dual_lshrrev_b32 v4, 16, v33
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v1 :: v_dual_lshrrev_b32 v71, 16, v0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v3 :: v_dual_lshrrev_b32 v81, 16, v2
+; GFX13-FAKE16-NEXT: s_branch .LBB53_6
+; GFX13-FAKE16-NEXT: .LBB53_5:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v2, s0 :: v_dual_mov_b32 v0, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v33, s16 :: v_dual_mov_b32 v7, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s20 :: v_dual_mov_b32 v12, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v10, s24 :: v_dual_mov_b32 v31, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s28 :: v_dual_mov_b32 v15, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v22, s4 :: v_dual_mov_b32 v20, s6
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s8 :: v_dual_mov_b32 v27, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s14 :: v_dual_mov_b32 v3, s1
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v34, s17
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, s19 :: v_dual_mov_b32 v6, s21
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s23 :: v_dual_mov_b32 v11, s25
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s27 :: v_dual_mov_b32 v18, s29
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, s13 :: v_dual_mov_b32 v23, s5
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s7 :: v_dual_mov_b32 v30, s9
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v28, s11 :: v_dual_mov_b32 v26, s15
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v81, s94 :: v_dual_mov_b32 v71, s93
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v4, s92 :: v_dual_mov_b32 v68, s91
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s90 :: v_dual_mov_b32 v65, s89
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v55, s88 :: v_dual_mov_b32 v14, s79
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s78 :: v_dual_mov_b32 v19, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v49, s76 :: v_dual_mov_b32 v39, s75
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v24, s74 :: v_dual_mov_b32 v36, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v35, s72 :: v_dual_mov_b32 v83, s63
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, s62 :: v_dual_mov_b32 v80, s61
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, s60 :: v_dual_mov_b32 v69, s59
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v67, s58 :: v_dual_mov_b32 v66, s57
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s56 :: v_dual_mov_b32 v54, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v53, s46 :: v_dual_mov_b32 v51, s45
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s44 :: v_dual_mov_b32 v48, s43
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s41 :: v_dual_mov_b32 v37, s40
+; GFX13-FAKE16-NEXT: .LBB53_6: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v84, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v4, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v14, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v80, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v64, 16, v31
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v85, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v81, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v71, 16, v84
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v71, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v68, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v70, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v9, 16, v34
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v34, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v65, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v55, 16, v33
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v33, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v52, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v54, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v19, 16, v32
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v32, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v49, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v39, 16, v31
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v24, 16, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v30
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v30, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v31, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v83, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v82, 16, v85
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v69, 16, v71
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v67, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v66, 16, v34
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v53, 16, v33
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v51, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v50, 16, v32
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v48, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v36, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v38, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v35, 16, v30
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v37, 16, v31
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -47119,6 +55534,260 @@ define <15 x double> @bitcast_v60f16_to_v15f64(<60 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB54_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60f16_to_v15f64:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v3 :: v_dual_lshrrev_b32 v82, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v1 :: v_dual_lshrrev_b32 v84, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB54_4
+; GFX13-TRUE16-NEXT: .LBB54_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB54_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr84_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr83_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr82_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr81_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr80_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr71_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr70_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr69_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr68_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr67_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr66_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr65_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr64_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr55_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr54_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr53_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr52_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr51_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr50_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr49_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr48_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr39_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr38_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr37_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr36_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr35_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr34_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr33_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr32_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr31_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-TRUE16-NEXT: .LBB54_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60f16_to_v15f64:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v29 :: v_dual_lshrrev_b32 v32, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v27 :: v_dual_lshrrev_b32 v34, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v25 :: v_dual_lshrrev_b32 v36, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v23 :: v_dual_lshrrev_b32 v38, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v21 :: v_dual_lshrrev_b32 v48, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v19 :: v_dual_lshrrev_b32 v50, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v17 :: v_dual_lshrrev_b32 v52, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v15 :: v_dual_lshrrev_b32 v54, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v13 :: v_dual_lshrrev_b32 v64, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v11 :: v_dual_lshrrev_b32 v66, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v9 :: v_dual_lshrrev_b32 v68, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v7 :: v_dual_lshrrev_b32 v70, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v5 :: v_dual_lshrrev_b32 v80, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v2 :: v_dual_lshrrev_b32 v84, 16, v3
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v30
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v81, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v82, v1, 0x5040100
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v83, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v84, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v80, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v71, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v70, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v69, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v68, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v67, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v66, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v65, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v64, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v55, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v54, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v53, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v52, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v51, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v50, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v49, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v48, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v39, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v38, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v37, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v36, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v35, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v34, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v33, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v32, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v31, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB54_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: .LBB54_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -48387,6 +57056,148 @@ define inreg <15 x double> @bitcast_v60f16_to_v15f64_scalar(<60 x half> inreg %a
; GFX11-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
; GFX11-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v60f16_to_v15f64_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_readfirstlane_b32 s45, v11
+; GFX13-NEXT: v_readfirstlane_b32 s46, v10
+; GFX13-NEXT: v_readfirstlane_b32 s56, v9
+; GFX13-NEXT: v_readfirstlane_b32 s60, v8
+; GFX13-NEXT: v_readfirstlane_b32 s62, v7
+; GFX13-NEXT: v_readfirstlane_b32 s63, v6
+; GFX13-NEXT: v_readfirstlane_b32 s72, v5
+; GFX13-NEXT: v_readfirstlane_b32 s74, v4
+; GFX13-NEXT: v_readfirstlane_b32 s78, v3
+; GFX13-NEXT: v_readfirstlane_b32 s88, v2
+; GFX13-NEXT: v_readfirstlane_b32 s89, v1
+; GFX13-NEXT: v_readfirstlane_b32 s90, v0
+; GFX13-NEXT: v_readfirstlane_b32 s92, v12
+; GFX13-NEXT: s_lshr_b32 s41, s29, 16
+; GFX13-NEXT: s_lshr_b32 s42, s28, 16
+; GFX13-NEXT: s_lshr_b32 s15, s27, 16
+; GFX13-NEXT: s_lshr_b32 s14, s26, 16
+; GFX13-NEXT: s_lshr_b32 s13, s25, 16
+; GFX13-NEXT: s_lshr_b32 s12, s24, 16
+; GFX13-NEXT: s_lshr_b32 s11, s23, 16
+; GFX13-NEXT: s_lshr_b32 s10, s22, 16
+; GFX13-NEXT: s_lshr_b32 s9, s21, 16
+; GFX13-NEXT: s_lshr_b32 s8, s20, 16
+; GFX13-NEXT: s_lshr_b32 s7, s19, 16
+; GFX13-NEXT: s_lshr_b32 s6, s18, 16
+; GFX13-NEXT: s_lshr_b32 s5, s17, 16
+; GFX13-NEXT: s_lshr_b32 s4, s16, 16
+; GFX13-NEXT: s_lshr_b32 s43, s3, 16
+; GFX13-NEXT: s_lshr_b32 s44, s2, 16
+; GFX13-NEXT: s_lshr_b32 s47, s1, 16
+; GFX13-NEXT: s_lshr_b32 s57, s0, 16
+; GFX13-NEXT: s_lshr_b32 s58, s45, 16
+; GFX13-NEXT: s_lshr_b32 s59, s46, 16
+; GFX13-NEXT: s_lshr_b32 s61, s56, 16
+; GFX13-NEXT: s_lshr_b32 s73, s60, 16
+; GFX13-NEXT: s_lshr_b32 s75, s62, 16
+; GFX13-NEXT: s_lshr_b32 s76, s63, 16
+; GFX13-NEXT: s_lshr_b32 s77, s72, 16
+; GFX13-NEXT: s_lshr_b32 s79, s74, 16
+; GFX13-NEXT: s_lshr_b32 s91, s78, 16
+; GFX13-NEXT: s_lshr_b32 s93, s88, 16
+; GFX13-NEXT: s_lshr_b32 s94, s89, 16
+; GFX13-NEXT: s_lshr_b32 s95, s90, 16
+; GFX13-NEXT: s_mov_b32 s40, 0
+; GFX13-NEXT: s_cmp_lg_u32 s92, 0
+; GFX13-NEXT: s_pack_ll_b32_b16 s0, s0, s57
+; GFX13-NEXT: s_pack_ll_b32_b16 s1, s1, s47
+; GFX13-NEXT: s_pack_ll_b32_b16 s2, s2, s44
+; GFX13-NEXT: s_pack_ll_b32_b16 s3, s3, s43
+; GFX13-NEXT: s_pack_ll_b32_b16 s4, s16, s4
+; GFX13-NEXT: s_pack_ll_b32_b16 s5, s17, s5
+; GFX13-NEXT: s_pack_ll_b32_b16 s6, s18, s6
+; GFX13-NEXT: s_pack_ll_b32_b16 s7, s19, s7
+; GFX13-NEXT: s_pack_ll_b32_b16 s8, s20, s8
+; GFX13-NEXT: s_pack_ll_b32_b16 s9, s21, s9
+; GFX13-NEXT: s_pack_ll_b32_b16 s10, s22, s10
+; GFX13-NEXT: s_pack_ll_b32_b16 s11, s23, s11
+; GFX13-NEXT: s_pack_ll_b32_b16 s12, s24, s12
+; GFX13-NEXT: s_pack_ll_b32_b16 s13, s25, s13
+; GFX13-NEXT: s_pack_ll_b32_b16 s14, s26, s14
+; GFX13-NEXT: s_pack_ll_b32_b16 s15, s27, s15
+; GFX13-NEXT: s_pack_ll_b32_b16 s16, s28, s42
+; GFX13-NEXT: s_pack_ll_b32_b16 s17, s29, s41
+; GFX13-NEXT: s_pack_ll_b32_b16 s18, s90, s95
+; GFX13-NEXT: s_pack_ll_b32_b16 s19, s89, s94
+; GFX13-NEXT: s_pack_ll_b32_b16 s20, s88, s93
+; GFX13-NEXT: s_pack_ll_b32_b16 s21, s78, s91
+; GFX13-NEXT: s_pack_ll_b32_b16 s22, s74, s79
+; GFX13-NEXT: s_pack_ll_b32_b16 s23, s72, s77
+; GFX13-NEXT: s_pack_ll_b32_b16 s24, s63, s76
+; GFX13-NEXT: s_pack_ll_b32_b16 s25, s62, s75
+; GFX13-NEXT: s_pack_ll_b32_b16 s26, s60, s73
+; GFX13-NEXT: s_pack_ll_b32_b16 s27, s56, s61
+; GFX13-NEXT: s_pack_ll_b32_b16 s28, s46, s59
+; GFX13-NEXT: s_pack_ll_b32_b16 s29, s45, s58
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s40, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s40, s40, exec_lo
+; GFX13-NEXT: s_cselect_b32 s40, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s40, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v4, 0x200, s4 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v5, 0x200, s5 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v6, 0x200, s6 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v7, 0x200, s7 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v10, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v11, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v12, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v13, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v16, 0x200, s16 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v17, 0x200, s17 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v18, 0x200, s18 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v19, 0x200, s19 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v20, 0x200, s20 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v21, 0x200, s21 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v22, 0x200, s22 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v23, 0x200, s23 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v24, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v25, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v26, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v27, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v28, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v29, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5
+; GFX13-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7
+; GFX13-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9
+; GFX13-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11
+; GFX13-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13
+; GFX13-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15
+; GFX13-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17
+; GFX13-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19
+; GFX13-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21
+; GFX13-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23
+; GFX13-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25
+; GFX13-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27
+; GFX13-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29
+; GFX13-NEXT: v_dual_mov_b32 v30, s30 :: v_dual_mov_b32 v31, s31
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -49980,6 +58791,286 @@ define <60 x half> @bitcast_v60i16_to_v60f16(<60 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v83, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v84, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60i16_to_v60f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v83, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v27 :: v_dual_lshrrev_b32 v81, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v25 :: v_dual_lshrrev_b32 v71, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v23 :: v_dual_lshrrev_b32 v69, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v21 :: v_dual_lshrrev_b32 v67, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v19 :: v_dual_lshrrev_b32 v65, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v17 :: v_dual_lshrrev_b32 v55, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v2 :: v_dual_lshrrev_b32 v32, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v36, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v6 :: v_dual_lshrrev_b32 v38, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v8 :: v_dual_lshrrev_b32 v48, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v10 :: v_dual_lshrrev_b32 v50, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v12 :: v_dual_lshrrev_b32 v52, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v14 :: v_dual_lshrrev_b32 v54, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v16 :: v_dual_lshrrev_b32 v64, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v18 :: v_dual_lshrrev_b32 v66, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v20 :: v_dual_lshrrev_b32 v68, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v22 :: v_dual_lshrrev_b32 v70, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v24 :: v_dual_lshrrev_b32 v80, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v26 :: v_dual_lshrrev_b32 v82, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v28 :: v_dual_lshrrev_b32 v84, 16, v29
+; GFX13-TRUE16-NEXT: .LBB56_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v84.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60i16_to_v60f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v83, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v27 :: v_dual_lshrrev_b32 v81, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v25 :: v_dual_lshrrev_b32 v71, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v23 :: v_dual_lshrrev_b32 v69, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v21 :: v_dual_lshrrev_b32 v67, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v19 :: v_dual_lshrrev_b32 v65, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v17 :: v_dual_lshrrev_b32 v55, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v1 :: v_dual_lshrrev_b32 v31, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB56_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v84, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v83, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v82, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v81, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v80, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v71, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v70, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v69, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v68, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v67, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v66, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v65, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v64, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v55, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v54, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v52, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v50, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v48, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v38, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v36, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v31, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v32, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v34, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, v29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, v28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, v27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, v26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, v25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, v24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, v23, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, v22, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, v21, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, v20, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, v19, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, v18, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, v17, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, v16, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, v15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, v10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, v7, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, v6, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, v5, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, v3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, v4, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v0 :: v_dual_lshrrev_b32 v32, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v2 :: v_dual_lshrrev_b32 v34, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v4 :: v_dual_lshrrev_b32 v36, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v6 :: v_dual_lshrrev_b32 v38, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v8 :: v_dual_lshrrev_b32 v48, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v10 :: v_dual_lshrrev_b32 v50, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v12 :: v_dual_lshrrev_b32 v52, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v14 :: v_dual_lshrrev_b32 v54, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v16 :: v_dual_lshrrev_b32 v64, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v18 :: v_dual_lshrrev_b32 v66, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v20 :: v_dual_lshrrev_b32 v68, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v22 :: v_dual_lshrrev_b32 v70, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v24 :: v_dual_lshrrev_b32 v80, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v26 :: v_dual_lshrrev_b32 v82, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v28 :: v_dual_lshrrev_b32 v84, 16, v29
+; GFX13-FAKE16-NEXT: .LBB56_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v31, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v32, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v34, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v36, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v38, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v48, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v50, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v52, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v54, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v55, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v64, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v65, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v66, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v67, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v68, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v69, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v70, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v71, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v80, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v81, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v82, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v83, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v84, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -51694,6 +60785,446 @@ define inreg <60 x half> @bitcast_v60i16_to_v60f16_scalar(<60 x i16> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v28, v31, 16, v35
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v29, v30, 16, v36
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60i16_to_v60f16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s93, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s92, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s89, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s91, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s90, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s88, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s78, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s76, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s79, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s77, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s75, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s94, v12
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s93, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s92, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s89, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s91, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s90, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s88, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s78, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s76, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s79, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s77, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s75, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s74, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s94, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s94, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s94, -1
+; GFX13-TRUE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s89, s59
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s62, s92, s62
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v27, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s91, s73
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s78, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s76, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s72, s93, s72
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v28, s62, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s62, s90, s63
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v26, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s88, s60
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v23, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s79, s61
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v22, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s77, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s75, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s74, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v29, s72, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v25, s62, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v24, s59, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v20, s47, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v19, s56, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v18, s46, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v16, s28, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v15, s27, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v14, s26, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v13, s25, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, s15, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v10, s14, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, s13, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, s12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v6, s10, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v5, s9, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v3, s3, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v4, s8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v4 :: v_dual_lshrrev_b32 v70, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v6 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v8 :: v_dual_lshrrev_b32 v66, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v10 :: v_dual_lshrrev_b32 v64, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v12 :: v_dual_lshrrev_b32 v54, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v14 :: v_dual_lshrrev_b32 v52, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v18 :: v_dual_lshrrev_b32 v48, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v20 :: v_dual_lshrrev_b32 v38, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v22 :: v_dual_lshrrev_b32 v36, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v24 :: v_dual_lshrrev_b32 v34, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v26 :: v_dual_lshrrev_b32 v32, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v28 :: v_dual_lshrrev_b32 v30, 16, v29
+; GFX13-TRUE16-NEXT: s_branch .LBB57_5
+; GFX13-TRUE16-NEXT: .LBB57_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s93 :: v_dual_mov_b32 v28, s92
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v27, s89 :: v_dual_mov_b32 v26, s91
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s90 :: v_dual_mov_b32 v24, s88
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s78 :: v_dual_mov_b32 v22, s76
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s79 :: v_dual_mov_b32 v20, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s75 :: v_dual_mov_b32 v18, s74
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s72 :: v_dual_mov_b32 v31, s62
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s59 :: v_dual_mov_b32 v33, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s63 :: v_dual_mov_b32 v35, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s57 :: v_dual_mov_b32 v37, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s61 :: v_dual_mov_b32 v39, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s56 :: v_dual_mov_b32 v49, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s45 :: v_dual_mov_b32 v51, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s43 :: v_dual_mov_b32 v53, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s41 :: v_dual_mov_b32 v55, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s15 :: v_dual_mov_b32 v65, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s13 :: v_dual_mov_b32 v67, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s11 :: v_dual_mov_b32 v69, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v70, s9 :: v_dual_mov_b32 v71, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v80, s6 :: v_dual_mov_b32 v81, s4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v82, s5 :: v_dual_mov_b32 v83, s7
+; GFX13-TRUE16-NEXT: .LBB57_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60i16_to_v60f16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s93, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s92, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s89, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s91, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s90, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s88, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s78, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s76, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s79, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s77, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s75, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s94, v12
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s93, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s92, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s89, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s91, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s90, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s88, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s78, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s76, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s79, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s77, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s75, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s74, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s94, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s94, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s94, -1
+; GFX13-FAKE16-NEXT: .LBB57_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s89, s59
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s62, s92, s62
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v27, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s91, s73
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s78, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s76, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s72, s93, s72
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v26, s62, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s62, s90, s63
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v28, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s88, s60
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v21, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s79, s61
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v22, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s77, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s75, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s74, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v25, s72, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v29, s62, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v20, s59, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v23, s57, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v24, s47, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v15, s56, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v16, s46, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v17, s29, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v18, s28, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v19, s27, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v10, s26, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v11, s25, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v12, s24, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, s15, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, s14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v5, s13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v6, s12, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v7, s11, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, s10, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, s9, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v4, s0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v3, s1, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v1, s3, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v0, s8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v4 :: v_dual_lshrrev_b32 v82, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v8 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v6 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v14 :: v_dual_lshrrev_b32 v64, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v12 :: v_dual_lshrrev_b32 v54, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v18 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v24 :: v_dual_lshrrev_b32 v38, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v22 :: v_dual_lshrrev_b32 v36, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v28 :: v_dual_lshrrev_b32 v32, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v26 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-FAKE16-NEXT: s_branch .LBB57_5
+; GFX13-FAKE16-NEXT: .LBB57_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s93 :: v_dual_mov_b32 v26, s92
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v27, s89 :: v_dual_mov_b32 v28, s91
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s90 :: v_dual_mov_b32 v20, s88
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s78 :: v_dual_mov_b32 v22, s76
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s79 :: v_dual_mov_b32 v24, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s75 :: v_dual_mov_b32 v16, s74
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v18, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s27 :: v_dual_mov_b32 v10, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s23 :: v_dual_mov_b32 v14, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s21 :: v_dual_mov_b32 v6, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v8, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s17 :: v_dual_mov_b32 v0, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v4, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s72 :: v_dual_mov_b32 v31, s62
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s59 :: v_dual_mov_b32 v33, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s63 :: v_dual_mov_b32 v35, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s57 :: v_dual_mov_b32 v37, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s61 :: v_dual_mov_b32 v39, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s56 :: v_dual_mov_b32 v49, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s45 :: v_dual_mov_b32 v51, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s43 :: v_dual_mov_b32 v53, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s41 :: v_dual_mov_b32 v55, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s15 :: v_dual_mov_b32 v65, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s13 :: v_dual_mov_b32 v67, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, s11 :: v_dual_mov_b32 v69, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, s9 :: v_dual_mov_b32 v71, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, s6 :: v_dual_mov_b32 v81, s4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, s5 :: v_dual_mov_b32 v83, s7
+; GFX13-FAKE16-NEXT: .LBB57_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v84, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v85, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v83, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v82, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v80, 16, v84
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v71, 16, v85
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v71, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v80, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v70, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v69, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v67, 16, v71
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v66, 16, v80
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v66, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v67, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v65, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v64, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v54, 16, v66
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v53, 16, v67
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v54, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v52, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v51, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v49, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v48, 16, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v39, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v38, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v36, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v35, 16, v49
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v81, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v68, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v55, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v50, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v37, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v34, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v33, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v32, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v31, 16, v35
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v30, 16, v36
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -52841,6 +62372,286 @@ define <60 x i16> @bitcast_v60f16_to_v60i16(<60 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_perm_b32 v28, v83, v28, 0x5040100
; GFX11-FAKE16-NEXT: v_perm_b32 v29, v84, v29, 0x5040100
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60f16_to_v60i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v83, 16, v28
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v82, 16, v27 :: v_dual_lshrrev_b32 v81, 16, v26
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v80, 16, v25 :: v_dual_lshrrev_b32 v71, 16, v24
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v70, 16, v23 :: v_dual_lshrrev_b32 v69, 16, v22
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v68, 16, v21 :: v_dual_lshrrev_b32 v67, 16, v20
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v66, 16, v19 :: v_dual_lshrrev_b32 v65, 16, v18
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v64, 16, v17 :: v_dual_lshrrev_b32 v55, 16, v16
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v54, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v52, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v50, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v48, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v38, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v36, 16, v5 :: v_dual_lshrrev_b32 v31, 16, v4
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v32, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v34, 16, v1 :: v_dual_lshrrev_b32 v35, 16, v0
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v84.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v0 :: v_dual_lshrrev_b32 v34, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v2 :: v_dual_lshrrev_b32 v32, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v4 :: v_dual_lshrrev_b32 v36, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v6 :: v_dual_lshrrev_b32 v38, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v8 :: v_dual_lshrrev_b32 v48, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v10 :: v_dual_lshrrev_b32 v50, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v12 :: v_dual_lshrrev_b32 v52, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v14 :: v_dual_lshrrev_b32 v54, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v16 :: v_dual_lshrrev_b32 v64, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v18 :: v_dual_lshrrev_b32 v66, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v20 :: v_dual_lshrrev_b32 v68, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v22 :: v_dual_lshrrev_b32 v70, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v24 :: v_dual_lshrrev_b32 v80, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v26 :: v_dual_lshrrev_b32 v82, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v28 :: v_dual_lshrrev_b32 v84, 16, v29
+; GFX13-TRUE16-NEXT: .LBB58_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v82.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v84.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60f16_to_v60i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v84, 16, v29 :: v_dual_lshrrev_b32 v83, 16, v28
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v82, 16, v27 :: v_dual_lshrrev_b32 v81, 16, v26
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v80, 16, v25 :: v_dual_lshrrev_b32 v71, 16, v24
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v70, 16, v23 :: v_dual_lshrrev_b32 v69, 16, v22
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v68, 16, v21 :: v_dual_lshrrev_b32 v67, 16, v20
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v66, 16, v19 :: v_dual_lshrrev_b32 v65, 16, v18
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v64, 16, v17 :: v_dual_lshrrev_b32 v55, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v54, 16, v15 :: v_dual_lshrrev_b32 v53, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v52, 16, v13 :: v_dual_lshrrev_b32 v51, 16, v12
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v50, 16, v11 :: v_dual_lshrrev_b32 v49, 16, v10
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v48, 16, v9 :: v_dual_lshrrev_b32 v39, 16, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v38, 16, v7 :: v_dual_lshrrev_b32 v37, 16, v6
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v36, 16, v5 :: v_dual_lshrrev_b32 v35, 16, v4
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v34, 16, v3 :: v_dual_lshrrev_b32 v33, 16, v2
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v32, 16, v1 :: v_dual_lshrrev_b32 v31, 16, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v30
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB58_2
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v84, v29, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v83, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v82, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v81, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v80, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v71, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v70, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v69, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v68, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v67, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v66, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v65, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v64, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v55, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v54, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v52, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v50, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v48, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v38, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v36, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v31, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v32, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v34, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, v29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, v28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, v27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, v26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, v25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, v24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, v23 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, v22 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, v21 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, v20 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, v19 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, v18 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, v17 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, v12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, v10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, v9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, v8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, v7 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, v6 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, v5 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, v3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, v4 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v0 :: v_dual_lshrrev_b32 v32, 16, v1
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v2 :: v_dual_lshrrev_b32 v34, 16, v3
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v4 :: v_dual_lshrrev_b32 v36, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v6 :: v_dual_lshrrev_b32 v38, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v8 :: v_dual_lshrrev_b32 v48, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v10 :: v_dual_lshrrev_b32 v50, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v12 :: v_dual_lshrrev_b32 v52, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v14 :: v_dual_lshrrev_b32 v54, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v16 :: v_dual_lshrrev_b32 v64, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v18 :: v_dual_lshrrev_b32 v66, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v20 :: v_dual_lshrrev_b32 v68, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v22 :: v_dual_lshrrev_b32 v70, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v24 :: v_dual_lshrrev_b32 v80, 16, v25
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v26 :: v_dual_lshrrev_b32 v82, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v28 :: v_dual_lshrrev_b32 v84, 16, v29
+; GFX13-FAKE16-NEXT: .LBB58_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v31, v0, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v32, v1, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v33, v2, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v34, v3, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v35, v4, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v36, v5, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v6, v37, v6, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v7, v38, v7, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v8, v39, v8, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v9, v48, v9, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v10, v49, v10, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v11, v50, v11, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v12, v51, v12, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v13, v52, v13, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v14, v53, v14, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v15, v54, v15, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v16, v55, v16, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v17, v64, v17, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v18, v65, v18, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v19, v66, v19, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v20, v67, v20, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v21, v68, v21, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v22, v69, v22, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v23, v70, v23, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v24, v71, v24, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v25, v80, v25, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v26, v81, v26, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v27, v82, v27, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v28, v83, v28, 0x5040100
+; GFX13-FAKE16-NEXT: v_perm_b32 v29, v84, v29, 0x5040100
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -54498,6 +64309,446 @@ define inreg <60 x i16> @bitcast_v60f16_to_v60i16_scalar(<60 x half> inreg %a, i
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v28, v31, 16, v35
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v29, v30, 16, v36
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v60f16_to_v60i16_scalar:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s93, v11
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s92, v10
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s89, v9
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s91, v8
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s90, v7
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s88, v6
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s78, v5
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s76, v4
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s79, v3
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s77, v2
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s75, v1
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-TRUE16-NEXT: v_readfirstlane_b32 s94, v12
+; GFX13-TRUE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s72, s93, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s62, s92, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s59, s89, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s73, s91, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s63, s90, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s60, s88, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s57, s78, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s47, s76, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s61, s79, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s58, s77, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s56, s75, 16
+; GFX13-TRUE16-NEXT: s_lshr_b32 s46, s74, 16
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s94, 0
+; GFX13-TRUE16-NEXT: s_mov_b32 s94, 0
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-TRUE16-NEXT: ; %bb.1:
+; GFX13-TRUE16-NEXT: s_mov_b32 s94, -1
+; GFX13-TRUE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-TRUE16-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-TRUE16-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-TRUE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s89, s59
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s62, s92, s62
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v27, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s91, s73
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s78, s57
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s76, s47
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s72, s93, s72
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v28, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s62, s90, s63
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v26, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s59, s88, s60
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v23, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s57, s79, s61
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v22, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s47, s77, s58
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s56, s75, s56
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s46, s74, s46
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-TRUE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v29, 0x200, s72 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v25, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v24, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v20, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v19, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v18, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v16, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v15, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v10, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v9, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v8, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v6, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v5, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v3, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v4, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v83, 16, v0 :: v_dual_lshrrev_b32 v82, 16, v1
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v81, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v3
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v71, 16, v4 :: v_dual_lshrrev_b32 v70, 16, v5
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v69, 16, v6 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v67, 16, v8 :: v_dual_lshrrev_b32 v66, 16, v9
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v65, 16, v10 :: v_dual_lshrrev_b32 v64, 16, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v55, 16, v12 :: v_dual_lshrrev_b32 v54, 16, v13
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v53, 16, v14 :: v_dual_lshrrev_b32 v52, 16, v15
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v51, 16, v16 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v49, 16, v18 :: v_dual_lshrrev_b32 v48, 16, v19
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v39, 16, v20 :: v_dual_lshrrev_b32 v38, 16, v21
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v37, 16, v22 :: v_dual_lshrrev_b32 v36, 16, v23
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v35, 16, v24 :: v_dual_lshrrev_b32 v34, 16, v25
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v33, 16, v26 :: v_dual_lshrrev_b32 v32, 16, v27
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v31, 16, v28 :: v_dual_lshrrev_b32 v30, 16, v29
+; GFX13-TRUE16-NEXT: s_branch .LBB59_5
+; GFX13-TRUE16-NEXT: .LBB59_4:
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v29, s93 :: v_dual_mov_b32 v28, s92
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v27, s89 :: v_dual_mov_b32 v26, s91
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v25, s90 :: v_dual_mov_b32 v24, s88
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v23, s78 :: v_dual_mov_b32 v22, s76
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v21, s79 :: v_dual_mov_b32 v20, s77
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v19, s75 :: v_dual_mov_b32 v18, s74
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v16, s28
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v15, s27 :: v_dual_mov_b32 v14, s26
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v13, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, s23 :: v_dual_mov_b32 v10, s22
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v8, s20
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v6, s18
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v5, s17 :: v_dual_mov_b32 v4, s16
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v3, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v0, s0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v30, s72 :: v_dual_mov_b32 v31, s62
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v32, s59 :: v_dual_mov_b32 v33, s73
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v34, s63 :: v_dual_mov_b32 v35, s60
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v36, s57 :: v_dual_mov_b32 v37, s47
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v38, s61 :: v_dual_mov_b32 v39, s58
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v48, s56 :: v_dual_mov_b32 v49, s46
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v50, s45 :: v_dual_mov_b32 v51, s44
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v52, s43 :: v_dual_mov_b32 v53, s42
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v54, s41 :: v_dual_mov_b32 v55, s40
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v64, s15 :: v_dual_mov_b32 v65, s14
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v66, s13 :: v_dual_mov_b32 v67, s12
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v68, s11 :: v_dual_mov_b32 v69, s10
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v70, s9 :: v_dual_mov_b32 v71, s8
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v80, s6 :: v_dual_mov_b32 v81, s4
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v82, s5 :: v_dual_mov_b32 v83, s7
+; GFX13-TRUE16-NEXT: .LBB59_5: ; %end
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.h, v83.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v1.h, v82.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v2.h, v81.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v3.h, v80.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.h, v71.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v5.h, v70.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v6.h, v69.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v7.h, v68.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.h, v67.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v9.h, v66.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v10.h, v65.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.h, v64.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v12.h, v55.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.h, v54.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.h, v53.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.h, v52.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.h, v51.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v17.h, v50.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v18.h, v49.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v19.h, v48.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v20.h, v39.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v21.h, v38.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v22.h, v37.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v23.h, v36.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v24.h, v35.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v25.h, v34.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v26.h, v33.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v27.h, v32.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v28.h, v31.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v29.h, v30.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v60f16_to_v60i16_scalar:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s93, v11
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s92, v10
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s89, v9
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s91, v8
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s90, v7
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s88, v6
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s78, v5
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s76, v4
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s79, v3
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s77, v2
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s75, v1
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s74, v0
+; GFX13-FAKE16-NEXT: v_readfirstlane_b32 s94, v12
+; GFX13-FAKE16-NEXT: s_lshr_b32 s45, s29, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s44, s28, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s43, s27, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s42, s26, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s41, s25, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s40, s24, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s15, s23, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s14, s22, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s13, s21, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s12, s20, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s11, s19, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s10, s18, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s9, s17, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s8, s16, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s6, s3, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s4, s2, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s5, s1, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s7, s0, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s72, s93, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s62, s92, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s59, s89, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s73, s91, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s63, s90, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s60, s88, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s57, s78, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s47, s76, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s61, s79, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s58, s77, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s56, s75, 16
+; GFX13-FAKE16-NEXT: s_lshr_b32 s46, s74, 16
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s94, 0
+; GFX13-FAKE16-NEXT: s_mov_b32 s94, 0
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-FAKE16-NEXT: ; %bb.1:
+; GFX13-FAKE16-NEXT: s_mov_b32 s94, -1
+; GFX13-FAKE16-NEXT: .LBB59_2: ; %Flow
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_and_b32 s94, s94, exec_lo
+; GFX13-FAKE16-NEXT: s_cselect_b32 s94, 1, 0
+; GFX13-FAKE16-NEXT: s_cmp_lg_u32 s94, 1
+; GFX13-FAKE16-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s89, s59
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s62, s92, s62
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v27, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s91, s73
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s78, s57
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s76, s47
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s72, s93, s72
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v26, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s62, s90, s63
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v28, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s59, s88, s60
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v21, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s57, s79, s61
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v22, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s47, s77, s58
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s56, s75, s56
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s46, s74, s46
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s29, s29, s45
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s28, s28, s44
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s27, s27, s43
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s26, s26, s42
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s25, s25, s41
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s24, s24, s40
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s15, s23, s15
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s14, s22, s14
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s13, s21, s13
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s12, s20, s12
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s11, s19, s11
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s10, s18, s10
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s9, s17, s9
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s8, s16, s8
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s3, s3, s6
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s2, s2, s4
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s0, s0, s7
+; GFX13-FAKE16-NEXT: s_pack_ll_b32_b16 s1, s1, s5
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v25, 0x200, s72 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v29, 0x200, s62 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v20, 0x200, s59 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v23, 0x200, s57 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v24, 0x200, s47 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, s56 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, s46 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v17, 0x200, s29 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v18, 0x200, s28 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v19, 0x200, s27 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v10, 0x200, s26 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v11, 0x200, s25 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v12, 0x200, s24 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, s15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v14, 0x200, s14 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v5, 0x200, s13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v6, 0x200, s12 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v7, 0x200, s11 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v8, 0x200, s10 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v9, 0x200, s9 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v4, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v3, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v1, 0x200, s3 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v0, 0x200, s8 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v83, 16, v4 :: v_dual_lshrrev_b32 v82, 16, v3
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v81, 16, v2 :: v_dual_lshrrev_b32 v80, 16, v1
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v71, 16, v0 :: v_dual_lshrrev_b32 v70, 16, v9
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v69, 16, v8 :: v_dual_lshrrev_b32 v68, 16, v7
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v67, 16, v6 :: v_dual_lshrrev_b32 v66, 16, v5
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v65, 16, v14 :: v_dual_lshrrev_b32 v64, 16, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v55, 16, v12 :: v_dual_lshrrev_b32 v54, 16, v11
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v53, 16, v10 :: v_dual_lshrrev_b32 v52, 16, v19
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v51, 16, v18 :: v_dual_lshrrev_b32 v50, 16, v17
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v49, 16, v16 :: v_dual_lshrrev_b32 v48, 16, v15
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v39, 16, v24 :: v_dual_lshrrev_b32 v38, 16, v23
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v37, 16, v22 :: v_dual_lshrrev_b32 v36, 16, v21
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v35, 16, v20 :: v_dual_lshrrev_b32 v34, 16, v29
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v33, 16, v28 :: v_dual_lshrrev_b32 v32, 16, v27
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v31, 16, v26 :: v_dual_lshrrev_b32 v30, 16, v25
+; GFX13-FAKE16-NEXT: s_branch .LBB59_5
+; GFX13-FAKE16-NEXT: .LBB59_4:
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v25, s93 :: v_dual_mov_b32 v26, s92
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v27, s89 :: v_dual_mov_b32 v28, s91
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v29, s90 :: v_dual_mov_b32 v20, s88
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v21, s78 :: v_dual_mov_b32 v22, s76
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v23, s79 :: v_dual_mov_b32 v24, s77
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, s75 :: v_dual_mov_b32 v16, s74
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v17, s29 :: v_dual_mov_b32 v18, s28
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v19, s27 :: v_dual_mov_b32 v10, s26
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v11, s25 :: v_dual_mov_b32 v12, s24
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, s23 :: v_dual_mov_b32 v14, s22
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v5, s21 :: v_dual_mov_b32 v6, s20
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v7, s19 :: v_dual_mov_b32 v8, s18
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v9, s17 :: v_dual_mov_b32 v0, s16
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v4, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v30, s72 :: v_dual_mov_b32 v31, s62
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v32, s59 :: v_dual_mov_b32 v33, s73
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v34, s63 :: v_dual_mov_b32 v35, s60
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v36, s57 :: v_dual_mov_b32 v37, s47
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v38, s61 :: v_dual_mov_b32 v39, s58
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v48, s56 :: v_dual_mov_b32 v49, s46
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v50, s45 :: v_dual_mov_b32 v51, s44
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v52, s43 :: v_dual_mov_b32 v53, s42
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v54, s41 :: v_dual_mov_b32 v55, s40
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v64, s15 :: v_dual_mov_b32 v65, s14
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v66, s13 :: v_dual_mov_b32 v67, s12
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v68, s11 :: v_dual_mov_b32 v69, s10
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v70, s9 :: v_dual_mov_b32 v71, s8
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v80, s6 :: v_dual_mov_b32 v81, s4
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v82, s5 :: v_dual_mov_b32 v83, s7
+; GFX13-FAKE16-NEXT: .LBB59_5: ; %end
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v84, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v85, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff, v9
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v83, 16, v4
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v82, 16, v3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v3, v80, 16, v84
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v4, v71, 16, v85
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v8, 0xffff, v8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v71, 0xffff, v6
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v80, 0xffff, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v5, v70, 16, v9
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v14, 0xffff, v14
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v6, v69, 16, v8
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v8, v67, 16, v71
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v9, v66, 16, v80
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v13, 0xffff, v13
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v66, 0xffff, v11
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v67, 0xffff, v10
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v10, v65, 16, v14
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v19, 0xffff, v19
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v11, v64, 16, v13
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v13, v54, 16, v66
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v14, v53, 16, v67
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v18, 0xffff, v18
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v53, 0xffff, v16
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v54, 0xffff, v15
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v15, v52, 16, v19
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v24, 0xffff, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v16, v51, 16, v18
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v18, v49, 16, v53
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v19, v48, 16, v54
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v23, 0xffff, v23
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v48, 0xffff, v21
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v49, 0xffff, v20
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff, v7
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v12, 0xffff, v12
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v17, 0xffff, v17
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v22, 0xffff, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v20, v39, 16, v24
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v21, v38, 16, v23
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v23, v36, 16, v48
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v24, v35, 16, v49
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v29, 0xffff, v29
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v28, 0xffff, v28
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v27, 0xffff, v27
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v35, 0xffff, v26
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v36, 0xffff, v25
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v81, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v7, v68, 16, v7
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v12, v55, 16, v12
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v17, v50, 16, v17
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v22, v37, 16, v22
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v25, v34, 16, v29
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v26, v33, 16, v28
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v27, v32, 16, v27
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v28, v31, 16, v35
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v29, v30, 16, v36
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.96bit.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.96bit.ll
index 374626a2578fb..405b81e8ce3cf 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.96bit.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.96bit.ll
@@ -5,6 +5,8 @@
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
; RUN: llc -mtriple=amdgpu11.00 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-TRUE16 %s
+; RUN: llc -mtriple=amdgpu13.10 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX13,GFX13-FAKE16 %s
define <3 x float> @bitcast_v3i32_to_v3f32(<3 x i32> %a, i32 %b) #0 {
; SI-LABEL: bitcast_v3i32_to_v3f32:
@@ -67,6 +69,25 @@ define <3 x float> @bitcast_v3i32_to_v3f32(<3 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v3f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -183,6 +204,34 @@ define inreg <3 x float> @bitcast_v3i32_to_v3f32_scalar(<3 x i32> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v3f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB1_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB1_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB1_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -260,6 +309,25 @@ define <3 x i32> @bitcast_v3f32_to_v3i32(<3 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v3i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -379,6 +447,34 @@ define inreg <3 x i32> @bitcast_v3f32_to_v3i32_scalar(<3 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v3i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB3_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB3_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB3_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -655,6 +751,106 @@ define <12 x i8> @bitcast_v3i32_to_v12i8(<3 x i32> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v13
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v14
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v3i32_to_v12i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, v2 :: v_dual_mov_b32 v12, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v11, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v12 :: v_dual_lshrrev_b32 v6, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v12 :: v_dual_lshrrev_b32 v2, 16, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[8:9]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v11
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB4_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_nc_u32 v12, 3, v12 :: v_dual_add_nc_u32 v11, 3, v11
+; GFX13-TRUE16-NEXT: v_add_nc_u32_e32 v8, 3, v8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v12 :: v_dual_lshrrev_b32 v6, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v11 :: v_dual_lshrrev_b32 v10, 16, v8
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v9, 8, v8
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v12 :: v_dual_lshrrev_b32 v1, 8, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[8:9]
+; GFX13-TRUE16-NEXT: .LBB4_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v12.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v13.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v3i32_to_v12i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v2 :: v_dual_mov_b32 v14, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v13, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB4_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v14, 3, v14 :: v_dual_add_nc_u32 v13, 3, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_add_nc_u32 v8, 3, v8 :: v_dual_lshrrev_b32 v7, 24, v14
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v14 :: v_dual_lshrrev_b32 v5, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v13 :: v_dual_lshrrev_b32 v1, 8, v13
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-FAKE16-NEXT: .LBB4_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v13 :: v_dual_mov_b32 v4, v14
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -911,6 +1107,66 @@ define inreg <12 x i8> @bitcast_v3i32_to_v12i8_scalar(<3 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s8
; GFX11-NEXT: v_dual_mov_b32 v10, s3 :: v_dual_mov_b32 v11, s6
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v12i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB5_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b32 s8, s2, 8
+; GFX13-NEXT: s_lshr_b32 s9, s1, 24
+; GFX13-NEXT: s_lshr_b32 s10, s1, 16
+; GFX13-NEXT: s_lshr_b32 s11, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s13, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB5_3
+; GFX13-NEXT: .LBB5_2:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB5_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB5_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s8, s2, 8
+; GFX13-NEXT: s_lshr_b32 s9, s1, 24
+; GFX13-NEXT: s_lshr_b32 s10, s1, 16
+; GFX13-NEXT: s_lshr_b32 s11, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s13, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: .LBB5_5: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s12 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s11
+; GFX13-NEXT: v_dual_mov_b32 v6, s10 :: v_dual_mov_b32 v7, s9
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s8
+; GFX13-NEXT: v_dual_mov_b32 v10, s3 :: v_dual_mov_b32 v11, s6
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1333,6 +1589,160 @@ define <3 x i32> @bitcast_v12i8_to_v3i32(<12 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v6
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i8_to_v3i32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB6_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB6_4
+; GFX13-TRUE16-NEXT: .LBB6_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB6_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v15, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v13, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-TRUE16-NEXT: .LBB6_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v15.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v14.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v13.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i8_to_v3i32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, v2 :: v_dual_mov_b32 v13, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v14, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB6_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB6_4
+; GFX13-FAKE16-NEXT: .LBB6_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB6_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v14, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v15, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB6_2
+; GFX13-FAKE16-NEXT: .LBB6_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v14, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v15, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1643,6 +2053,74 @@ define inreg <3 x i32> @bitcast_v12i8_to_v3i32_scalar(<12 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v2, v5, v6
; GFX11-NEXT: .LBB7_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i8_to_v3i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB7_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v4, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v5, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v5, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v6, v3
+; GFX13-NEXT: s_branch .LBB7_3
+; GFX13-NEXT: .LBB7_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2
+; GFX13-NEXT: .LBB7_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB7_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v0, s22, s23, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: .LBB7_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1756,6 +2234,25 @@ define <6 x bfloat> @bitcast_v3i32_to_v6bf16(<3 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v6bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -1899,6 +2396,34 @@ define inreg <6 x bfloat> @bitcast_v3i32_to_v6bf16_scalar(<3 x i32> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v6bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB9_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB9_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB9_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2245,6 +2770,26 @@ define <3 x i32> @bitcast_v6bf16_to_v3i32(<6 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB10_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v3i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2650,6 +3195,34 @@ define inreg <3 x i32> @bitcast_v6bf16_to_v3i32_scalar(<6 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v2, s2
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v3i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB11_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB11_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB11_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2748,6 +3321,25 @@ define <6 x half> @bitcast_v3i32_to_v6f16(<3 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v6f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -2882,6 +3474,34 @@ define inreg <6 x half> @bitcast_v3i32_to_v6f16_scalar(<3 x i32> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v6f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB13_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB13_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB13_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3020,6 +3640,26 @@ define <3 x i32> @bitcast_v6f16_to_v3i32(<6 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v3i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3187,6 +3827,34 @@ define inreg <3 x i32> @bitcast_v6f16_to_v3i32_scalar(<6 x half> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v3i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB15_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB15_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB15_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3285,6 +3953,25 @@ define <6 x i16> @bitcast_v3i32_to_v6i16(<3 x i32> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v6i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_nc_u32 v2, 3, v2 :: v_dual_add_nc_u32 v1, 3, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 3, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3419,6 +4106,34 @@ define inreg <6 x i16> @bitcast_v3i32_to_v6i16_scalar(<3 x i32> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3i32_to_v6i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB17_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB17_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s1, s1, 3
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: .LBB17_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3544,6 +4259,26 @@ define <3 x i32> @bitcast_v6i16_to_v3i32(<6 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v3i32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3698,6 +4433,34 @@ define inreg <3 x i32> @bitcast_v6i16_to_v3i32_scalar(<6 x i16> inreg %a, i32 in
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v3i32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB19_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB19_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB19_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -3972,6 +4735,106 @@ define <12 x i8> @bitcast_v3f32_to_v12i8(<3 x float> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v13
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v14
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v3f32_to_v12i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, v2 :: v_dual_mov_b32 v12, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v11, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v12 :: v_dual_lshrrev_b32 v6, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v12 :: v_dual_lshrrev_b32 v2, 16, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[8:9]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v11
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB20_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_dual_add_f32 v12, 1.0, v12 :: v_dual_add_f32 v11, 1.0, v11
+; GFX13-TRUE16-NEXT: v_add_f32_e32 v8, 1.0, v8
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v12 :: v_dual_lshrrev_b32 v6, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v2, 16, v11 :: v_dual_lshrrev_b32 v10, 16, v8
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v9, 8, v8
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v12 :: v_dual_lshrrev_b32 v1, 8, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[8:9]
+; GFX13-TRUE16-NEXT: .LBB20_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v12.l
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v13.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v3f32_to_v12i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v2 :: v_dual_mov_b32 v14, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v13, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB20_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v14, 1.0, v14 :: v_dual_add_f32 v13, 1.0, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-FAKE16-NEXT: v_dual_add_f32 v8, 1.0, v8 :: v_dual_lshrrev_b32 v7, 24, v14
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v6, 16, v14 :: v_dual_lshrrev_b32 v5, 8, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 16, v13 :: v_dual_lshrrev_b32 v1, 8, v13
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-FAKE16-NEXT: .LBB20_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v13 :: v_dual_mov_b32 v4, v14
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4248,6 +5111,67 @@ define inreg <12 x i8> @bitcast_v3f32_to_v12i8_scalar(<3 x float> inreg %a, i32
; GFX11-NEXT: v_mov_b32_e32 v0, v13
; GFX11-NEXT: v_mov_b32_e32 v4, v14
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v12i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s14, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB21_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b32 s8, s2, 8
+; GFX13-NEXT: s_lshr_b32 s9, s1, 24
+; GFX13-NEXT: s_lshr_b32 s10, s1, 16
+; GFX13-NEXT: s_lshr_b32 s11, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s13, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB21_3
+; GFX13-NEXT: .LBB21_2:
+; GFX13-NEXT: s_mov_b32 s14, -1
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr8
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB21_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s14, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB21_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b32 s8, s2, 8
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_lshr_b32 s9, s1, 24
+; GFX13-NEXT: s_lshr_b32 s10, s1, 16
+; GFX13-NEXT: s_lshr_b32 s11, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s13, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: .LBB21_5: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s13
+; GFX13-NEXT: v_dual_mov_b32 v2, s12 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: v_dual_mov_b32 v4, s1 :: v_dual_mov_b32 v5, s11
+; GFX13-NEXT: v_dual_mov_b32 v6, s10 :: v_dual_mov_b32 v7, s9
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v9, s8
+; GFX13-NEXT: v_dual_mov_b32 v10, s3 :: v_dual_mov_b32 v11, s6
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4670,6 +5594,160 @@ define <3 x float> @bitcast_v12i8_to_v3f32(<12 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v6
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i8_to_v3f32:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB22_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB22_4
+; GFX13-TRUE16-NEXT: .LBB22_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB22_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v15, v14, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v13, v3, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-TRUE16-NEXT: .LBB22_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v15.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v14.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v13.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v3.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i8_to_v3f32:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v15, v2 :: v_dual_mov_b32 v13, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v14, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB22_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB22_4
+; GFX13-FAKE16-NEXT: .LBB22_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB22_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v14, v13, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v15, v3, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB22_2
+; GFX13-FAKE16-NEXT: .LBB22_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v14, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v13
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v15, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -4980,6 +6058,74 @@ define inreg <3 x float> @bitcast_v12i8_to_v3f32_scalar(<12 x i8> inreg %a, i32
; GFX11-NEXT: v_or_b32_e32 v2, v5, v6
; GFX11-NEXT: .LBB23_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i8_to_v3f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB23_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v4, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v5, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v5, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v6, v3
+; GFX13-NEXT: s_branch .LBB23_3
+; GFX13-NEXT: .LBB23_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2
+; GFX13-NEXT: .LBB23_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB23_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v0, s22, s23, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: .LBB23_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5092,6 +6238,25 @@ define <6 x bfloat> @bitcast_v3f32_to_v6bf16(<3 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v6bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5247,6 +6412,34 @@ define inreg <6 x bfloat> @bitcast_v3f32_to_v6bf16_scalar(<3 x float> inreg %a,
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v6bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB25_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB25_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB25_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5593,6 +6786,26 @@ define <3 x float> @bitcast_v6bf16_to_v3f32(<6 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB26_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v3f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -5998,6 +7211,34 @@ define inreg <3 x float> @bitcast_v6bf16_to_v3f32_scalar(<6 x bfloat> inreg %a,
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v2, s2
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v3f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB27_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB27_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB27_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6095,6 +7336,25 @@ define <6 x half> @bitcast_v3f32_to_v6f16(<3 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v6f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6238,6 +7498,34 @@ define inreg <6 x half> @bitcast_v3f32_to_v6f16_scalar(<3 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v6f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB29_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB29_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB29_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6376,6 +7664,26 @@ define <3 x float> @bitcast_v6f16_to_v3f32(<6 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v3f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6543,6 +7851,34 @@ define inreg <3 x float> @bitcast_v6f16_to_v3f32_scalar(<6 x half> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v3f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB31_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB31_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB31_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6640,6 +7976,25 @@ define <6 x i16> @bitcast_v3f32_to_v6i16(<3 x float> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v6i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_dual_add_f32 v2, 1.0, v2 :: v_dual_add_f32 v1, 1.0, v1
+; GFX13-NEXT: v_add_f32_e32 v0, 1.0, v0
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6783,6 +8138,34 @@ define inreg <6 x i16> @bitcast_v3f32_to_v6i16_scalar(<3 x float> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v3f32_to_v6i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB33_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB33_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: s_add_f32 s2, s2, 1.0
+; GFX13-NEXT: s_add_f32 s1, s1, 1.0
+; GFX13-NEXT: s_add_f32 s0, s0, 1.0
+; GFX13-NEXT: .LBB33_4: ; %end
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_3)
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -6908,6 +8291,26 @@ define <3 x float> @bitcast_v6i16_to_v3f32(<6 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v3f32:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7062,6 +8465,34 @@ define inreg <3 x float> @bitcast_v6i16_to_v3f32_scalar(<6 x i16> inreg %a, i32
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_mov_b32_e32 v2, s2
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v3f32_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s3, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s3, -1
+; GFX13-NEXT: .LBB35_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s3, s3, exec_lo
+; GFX13-NEXT: s_cselect_b32 s3, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB35_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB35_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_mov_b32_e32 v2, s2
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7503,6 +8934,161 @@ define <6 x bfloat> @bitcast_v12i8_to_v6bf16(<12 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v6
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i8_to_v6bf16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB36_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB36_4
+; GFX13-TRUE16-NEXT: .LBB36_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB36_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v16, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v14, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-TRUE16-NEXT: .LBB36_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i8_to_v6bf16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v3 :: v_dual_mov_b32 v13, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, v1 :: v_dual_mov_b32 v15, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB36_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB36_4
+; GFX13-FAKE16-NEXT: .LBB36_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB36_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v15, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v13, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB36_2
+; GFX13-FAKE16-NEXT: .LBB36_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v15, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v13, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v16
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -7830,6 +9416,74 @@ define inreg <6 x bfloat> @bitcast_v12i8_to_v6bf16_scalar(<12 x i8> inreg %a, i3
; GFX11-NEXT: v_or_b32_e32 v2, v5, v6
; GFX11-NEXT: .LBB37_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i8_to_v6bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB37_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v4, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v5, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v5, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v6, v3
+; GFX13-NEXT: s_branch .LBB37_3
+; GFX13-NEXT: .LBB37_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB37_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB37_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v0, s22, s23, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: .LBB37_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8351,6 +10005,110 @@ define <12 x i8> @bitcast_v6bf16_to_v12i8(<6 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v13
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v14
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v6bf16_to_v12i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, v2 :: v_dual_mov_b32 v14, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v13, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v11 :: v_dual_lshrrev_b32 v9, 8, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB38_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v14, 0x40c0, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_bf16 v11, 0x40c0, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, 0x7fc07fc0 :: v_dual_lshrrev_b32 v7, 24, v14
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v9, 8, v11
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v11 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-TRUE16-NEXT: .LBB38_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v15.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v6bf16_to_v12i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, v2 :: v_dual_mov_b32 v16, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v15, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v13 :: v_dual_lshrrev_b32 v9, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v16 :: v_dual_lshrrev_b32 v6, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v16 :: v_dual_lshrrev_b32 v2, 16, v15
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v15
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB38_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v16, 0x40c0, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v15, 0x40c0, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_bf16 v13, 0x40c0, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, 0x7fc07fc0 :: v_dual_lshrrev_b32 v7, 24, v16
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[15:16]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v9, 8, v13
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v13 :: v_dual_lshrrev_b32 v6, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v16 :: v_dual_lshrrev_b32 v2, 16, v15
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v15
+; GFX13-FAKE16-NEXT: .LBB38_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v15 :: v_dual_mov_b32 v4, v16
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, v13
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -8933,6 +10691,72 @@ define inreg <12 x i8> @bitcast_v6bf16_to_v12i8_scalar(<6 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v6, s12 :: v_dual_mov_b32 v11, s6
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v3, s4 :: v_dual_mov_b32 v4, s1
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v12i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB39_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b32 s9, s2, 8
+; GFX13-NEXT: s_lshr_b32 s10, s1, 24
+; GFX13-NEXT: s_lshr_b32 s11, s1, 16
+; GFX13-NEXT: s_lshr_b32 s13, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s14, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB39_3
+; GFX13-NEXT: .LBB39_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB39_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB39_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v15, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v14, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v8, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_mov_b32_e32 v9, 0x7fc07fc0
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b32_e32 v7, 24, v15
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[14:15]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b32_e32 v10, 16, v8
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v8 :: v_dual_lshrrev_b32 v6, 16, v15
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v15 :: v_dual_lshrrev_b32 v2, 16, v14
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v14
+; GFX13-NEXT: s_branch .LBB39_6
+; GFX13-NEXT: .LBB39_5:
+; GFX13-NEXT: v_dual_mov_b32 v14, s0 :: v_dual_mov_b32 v15, s1
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v1, s14
+; GFX13-NEXT: v_dual_mov_b32 v2, s12 :: v_dual_mov_b32 v5, s13
+; GFX13-NEXT: v_dual_mov_b32 v6, s11 :: v_dual_mov_b32 v7, s10
+; GFX13-NEXT: v_dual_mov_b32 v13, s9 :: v_dual_mov_b32 v10, s3
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB39_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v14 :: v_dual_mov_b32 v4, v15
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v9, v13
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9372,6 +11196,161 @@ define <6 x half> @bitcast_v12i8_to_v6f16(<12 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v6
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i8_to_v6f16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB40_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB40_4
+; GFX13-TRUE16-NEXT: .LBB40_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB40_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v16, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v14, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-TRUE16-NEXT: .LBB40_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i8_to_v6f16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v3 :: v_dual_mov_b32 v13, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, v1 :: v_dual_mov_b32 v15, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB40_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB40_4
+; GFX13-FAKE16-NEXT: .LBB40_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB40_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v15, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v13, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB40_2
+; GFX13-FAKE16-NEXT: .LBB40_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v15, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v13, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v16
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -9702,6 +11681,74 @@ define inreg <6 x half> @bitcast_v12i8_to_v6f16_scalar(<12 x i8> inreg %a, i32 i
; GFX11-NEXT: v_or_b32_e32 v2, v5, v6
; GFX11-NEXT: .LBB41_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i8_to_v6f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB41_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v4, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v5, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v5, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v6, v3
+; GFX13-NEXT: s_branch .LBB41_3
+; GFX13-NEXT: .LBB41_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB41_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB41_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v0, s22, s23, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: .LBB41_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10026,6 +12073,110 @@ define <12 x i8> @bitcast_v6f16_to_v12i8(<6 x half> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v16
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v8, v13
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v6f16_to_v12i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v11, v2 :: v_dual_mov_b32 v14, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v13, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v11 :: v_dual_lshrrev_b32 v9, 8, v11
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB42_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v14, 0x200, v14 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: v_pk_add_f16 v11, 0x200, v11 op_sel_hi:[0,1]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v12, 0x7e007e00 :: v_dual_lshrrev_b32 v7, 24, v14
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v9, 8, v11
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[15:16], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v11 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-TRUE16-NEXT: .LBB42_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v13.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v14.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v8.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v15.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v6f16_to_v12i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v13, v2 :: v_dual_mov_b32 v16, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v15, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v13 :: v_dual_lshrrev_b32 v9, 8, v13
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v16 :: v_dual_lshrrev_b32 v6, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v16 :: v_dual_lshrrev_b32 v2, 16, v15
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[15:16]
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v15
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB42_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v16, 0x200, v16 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v15, 0x200, v15 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: v_pk_add_f16 v13, 0x200, v13 op_sel_hi:[0,1]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, 0x7e007e00 :: v_dual_lshrrev_b32 v7, 24, v16
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[15:16]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v9, 8, v13
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v13 :: v_dual_lshrrev_b32 v6, 16, v16
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v16 :: v_dual_lshrrev_b32 v2, 16, v15
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v15
+; GFX13-FAKE16-NEXT: .LBB42_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v15 :: v_dual_mov_b32 v4, v16
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v8, v13
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10345,6 +12496,72 @@ define inreg <12 x i8> @bitcast_v6f16_to_v12i8_scalar(<6 x half> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, v14 :: v_dual_mov_b32 v9, v13
; GFX11-NEXT: v_mov_b32_e32 v4, v15
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v12i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB43_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b32 s9, s2, 8
+; GFX13-NEXT: s_lshr_b32 s10, s1, 24
+; GFX13-NEXT: s_lshr_b32 s11, s1, 16
+; GFX13-NEXT: s_lshr_b32 s13, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s14, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB43_3
+; GFX13-NEXT: .LBB43_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB43_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB43_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v15, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v14, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v8, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_mov_b32_e32 v9, 0x7e007e00
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b32_e32 v7, 24, v15
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[14:15]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX13-NEXT: v_lshrrev_b32_e32 v10, 16, v8
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-NEXT: v_dual_lshrrev_b32 v13, 8, v8 :: v_dual_lshrrev_b32 v6, 16, v15
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v15 :: v_dual_lshrrev_b32 v2, 16, v14
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v14
+; GFX13-NEXT: s_branch .LBB43_6
+; GFX13-NEXT: .LBB43_5:
+; GFX13-NEXT: v_dual_mov_b32 v14, s0 :: v_dual_mov_b32 v15, s1
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v1, s14
+; GFX13-NEXT: v_dual_mov_b32 v2, s12 :: v_dual_mov_b32 v5, s13
+; GFX13-NEXT: v_dual_mov_b32 v6, s11 :: v_dual_mov_b32 v7, s10
+; GFX13-NEXT: v_dual_mov_b32 v13, s9 :: v_dual_mov_b32 v10, s3
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB43_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v14 :: v_dual_mov_b32 v4, v15
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_mov_b32_e32 v9, v13
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -10784,6 +13001,161 @@ define <6 x i16> @bitcast_v12i8_to_v6i16(<12 x i8> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v6
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v12i8_to_v6i16:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v13.l, v3.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v14.l, v2.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v15.l, v1.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v16.l, v0.l
+; GFX13-TRUE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-TRUE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB44_3
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execnz .LBB44_4
+; GFX13-TRUE16-NEXT: .LBB44_2: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-TRUE16-NEXT: .LBB44_3: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_perm_b32 v0, v16, v15, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v1, v14, v13, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr16_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr15_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr14_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr8_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr11_lo16
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-TRUE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr4_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-TRUE16-NEXT: .LBB44_4: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, v16.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v15.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, v14.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v1.h, 8, v13.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, v4.l, 3
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, v6.l, 3
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v0.l, v0.h, v0.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v0.h, 8, v5.l
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v3.l, 8, v7.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v3.h, v8.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v4.l, 8, v9.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v4.h, v10.l, 3
+; GFX13-TRUE16-NEXT: v_lshlrev_b16 v5.l, 8, v11.l
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.l, v1.h, v1.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v1.h, v0.h, v2.l, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.l, v3.l, v2.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v2.h, v4.l, v3.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_bitop3_b16 v3.l, v5.l, v4.h, 0xff bitop3:0xf8
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.l, 0x300, v0.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v0.h, 0x300, v1.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.l, 0x300, v1.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v1.h, 0x300, v2.l
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.l, 0x300, v2.h
+; GFX13-TRUE16-NEXT: v_add_nc_u16 v2.h, 0x300, v3.l
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v12i8_to_v6i16:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v16, v3 :: v_dual_mov_b32 v13, v2
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v14, v1 :: v_dual_mov_b32 v15, v0
+; GFX13-FAKE16-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-FAKE16-NEXT: v_cmpx_ne_u32_e32 0, v12
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB44_3
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execnz .LBB44_4
+; GFX13-FAKE16-NEXT: .LBB44_2: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-FAKE16-NEXT: .LBB44_3: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_perm_b32 v0, v15, v14, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v1, v13, v16, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v2, v4, v5, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v3, v6, v7, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v4, v8, v9, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_perm_b32 v5, v10, v11, 0xc0c0004
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr15
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr14
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr13
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr16
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr8
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v2
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr4
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB44_2
+; GFX13-FAKE16-NEXT: .LBB44_4: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, v15, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v14
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, v4, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, v13, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v3, 8, v16
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v7, 8, v7
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v0, v1, v0, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v1, 8, v5
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, v6, 3
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v6, v8, 3
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v8, 8, v9
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v9, v10, 3
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v1, v1, v4, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v0, 0x300, v0
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v2, v3, v2, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v4, v8, v6, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_lshlrev_b16 v6, 8, v11
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v1, 0x300, v1
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v3, v7, v5, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v4, 0x300, v4
+; GFX13-FAKE16-NEXT: v_bitop3_b16 v5, v6, v9, 0xff bitop3:0xf8
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v2, 0x300, v2
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v3, 0x300, v3
+; GFX13-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX13-FAKE16-NEXT: v_add_nc_u16 v5, 0x300, v5
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v1
+; GFX13-FAKE16-NEXT: v_lshl_or_b32 v2, v5, 16, v4
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11114,6 +13486,74 @@ define inreg <6 x i16> @bitcast_v12i8_to_v6i16_scalar(<12 x i8> inreg %a, i32 in
; GFX11-NEXT: v_or_b32_e32 v2, v5, v6
; GFX11-NEXT: .LBB45_5: ; %end
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v12i8_to_v6i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s24, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB45_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v4, s22, s23, v0
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v5, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v6, s20, s21, v0
+; GFX13-NEXT: v_dual_lshlrev_b32 v0, 16, v2 :: v_dual_lshlrev_b32 v2, 16, v3
+; GFX13-NEXT: v_lshlrev_b32_e32 v3, 16, v4
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v0, v1, v0
+; GFX13-NEXT: v_or_b32_e32 v1, v5, v2
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_or_b32_e32 v2, v6, v3
+; GFX13-NEXT: s_branch .LBB45_3
+; GFX13-NEXT: .LBB45_2:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
+; GFX13-NEXT: .LBB45_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB45_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_mov_b32_e32 v0, 0xc0c0004
+; GFX13-NEXT: s_add_co_i32 s0, s0, 3
+; GFX13-NEXT: s_add_co_i32 s2, s2, 3
+; GFX13-NEXT: s_add_co_i32 s16, s16, 3
+; GFX13-NEXT: s_add_co_i32 s18, s18, 3
+; GFX13-NEXT: s_add_co_i32 s20, s20, 3
+; GFX13-NEXT: s_add_co_i32 s22, s22, 3
+; GFX13-NEXT: v_perm_b32 v1, s0, s1, v0
+; GFX13-NEXT: v_perm_b32 v2, s2, s3, v0
+; GFX13-NEXT: v_perm_b32 v3, s16, s17, v0
+; GFX13-NEXT: v_perm_b32 v4, s18, s19, v0
+; GFX13-NEXT: v_perm_b32 v5, s20, s21, v0
+; GFX13-NEXT: v_perm_b32 v0, s22, s23, v0
+; GFX13-NEXT: v_add_nc_u32_e32 v1, 0x300, v1
+; GFX13-NEXT: v_add_nc_u32_e32 v2, 0x300, v2
+; GFX13-NEXT: v_add_nc_u32_e32 v3, 0x300, v3
+; GFX13-NEXT: v_add_nc_u32_e32 v4, 0x300, v4
+; GFX13-NEXT: v_add_nc_u32_e32 v5, 0x300, v5
+; GFX13-NEXT: v_add_nc_u32_e32 v0, 0x300, v0
+; GFX13-NEXT: v_and_b32_e32 v1, 0xffff, v1
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_lshlrev_b32 v2, 16, v2 :: v_dual_lshlrev_b32 v4, 16, v4
+; GFX13-NEXT: v_and_b32_e32 v3, 0xffff, v3
+; GFX13-NEXT: v_and_b32_e32 v5, 0xffff, v5
+; GFX13-NEXT: v_dual_lshlrev_b32 v6, 16, v0 :: v_dual_bitop2_b32 v0, v1, v2 bitop3:0x54
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
+; GFX13-NEXT: v_or_b32_e32 v1, v3, v4
+; GFX13-NEXT: v_or_b32_e32 v2, v5, v6
+; GFX13-NEXT: .LBB45_5: ; %end
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11434,6 +13874,110 @@ define <12 x i8> @bitcast_v6i16_to_v12i8(<6 x i16> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v0, v13
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v4, v14
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-TRUE16-LABEL: bitcast_v6i16_to_v12i8:
+; GFX13-TRUE16: ; %bb.0:
+; GFX13-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_expcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-TRUE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-TRUE16-NEXT: v_dual_mov_b32 v8, v2 :: v_dual_mov_b32 v12, v1
+; GFX13-TRUE16-NEXT: v_mov_b32_e32 v11, v0
+; GFX13-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr1_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr2_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr3_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr5_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr6_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr7_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr9_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr10_lo16
+; GFX13-TRUE16-NEXT: ; implicit-def: $vgpr13_lo16
+; GFX13-TRUE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-TRUE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-TRUE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v12 :: v_dual_lshrrev_b32 v6, 16, v12
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v12 :: v_dual_lshrrev_b32 v2, 16, v11
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[8:9]
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v11
+; GFX13-TRUE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-TRUE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-TRUE16-NEXT: s_cbranch_execz .LBB46_4
+; GFX13-TRUE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v12, v12, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v9, v0, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: v_pk_add_u16 v11, v11, 3 op_sel_hi:[1,0]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v7, 24, v12 :: v_dual_lshrrev_b32 v6, 16, v12
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[13:14], 24, v[8:9]
+; GFX13-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-TRUE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[11:12]
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-TRUE16-NEXT: v_dual_lshrrev_b32 v5, 8, v12 :: v_dual_lshrrev_b32 v2, 16, v11
+; GFX13-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 8, v11
+; GFX13-TRUE16-NEXT: .LBB46_4: ; %end
+; GFX13-TRUE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v0.l, v11.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v4.l, v12.l
+; GFX13-TRUE16-NEXT: v_mov_b16_e32 v11.l, v13.l
+; GFX13-TRUE16-NEXT: s_set_pc_i64 s[30:31]
+;
+; GFX13-FAKE16-LABEL: bitcast_v6i16_to_v12i8:
+; GFX13-FAKE16: ; %bb.0:
+; GFX13-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_expcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_samplecnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_bvhcnt 0x0
+; GFX13-FAKE16-NEXT: s_wait_kmcnt 0x0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v8, v2 :: v_dual_mov_b32 v14, v1
+; GFX13-FAKE16-NEXT: v_mov_b32_e32 v13, v0
+; GFX13-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr1
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr2
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr3
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr5
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr6
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr7
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr9
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr10
+; GFX13-FAKE16-NEXT: ; implicit-def: $vgpr11
+; GFX13-FAKE16-NEXT: s_and_saveexec_b32 s0, vcc_lo
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-FAKE16-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-FAKE16-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-FAKE16-NEXT: ; %bb.2: ; %Flow
+; GFX13-FAKE16-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-FAKE16-NEXT: s_cbranch_execz .LBB46_4
+; GFX13-FAKE16-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v14, v14, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v9, v0, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v8, v8, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: v_pk_add_u16 v13, v13, 3 op_sel_hi:[1,0]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-FAKE16-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-FAKE16-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-FAKE16-NEXT: .LBB46_4: ; %end
+; GFX13-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-FAKE16-NEXT: v_dual_mov_b32 v0, v13 :: v_dual_mov_b32 v4, v14
+; GFX13-FAKE16-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -11737,6 +14281,69 @@ define inreg <12 x i8> @bitcast_v6i16_to_v12i8_scalar(<6 x i16> inreg %a, i32 in
; GFX11-NEXT: v_mov_b32_e32 v0, v13
; GFX11-NEXT: v_mov_b32_e32 v4, v14
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v12i8_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s8, 0
+; GFX13-NEXT: s_cbranch_scc0 .LBB47_2
+; GFX13-NEXT: ; %bb.1: ; %cmp.false
+; GFX13-NEXT: s_lshr_b32 s3, s2, 16
+; GFX13-NEXT: s_lshr_b32 s9, s2, 8
+; GFX13-NEXT: s_lshr_b32 s10, s1, 24
+; GFX13-NEXT: s_lshr_b32 s11, s1, 16
+; GFX13-NEXT: s_lshr_b32 s13, s1, 8
+; GFX13-NEXT: s_lshr_b32 s12, s0, 16
+; GFX13-NEXT: s_lshr_b32 s14, s0, 8
+; GFX13-NEXT: s_lshr_b64 s[6:7], s[2:3], 24
+; GFX13-NEXT: s_lshr_b64 s[4:5], s[0:1], 24
+; GFX13-NEXT: s_branch .LBB47_3
+; GFX13-NEXT: .LBB47_2:
+; GFX13-NEXT: s_mov_b32 s8, -1
+; GFX13-NEXT: ; implicit-def: $sgpr14
+; GFX13-NEXT: ; implicit-def: $sgpr12
+; GFX13-NEXT: ; implicit-def: $sgpr4
+; GFX13-NEXT: ; implicit-def: $sgpr13
+; GFX13-NEXT: ; implicit-def: $sgpr11
+; GFX13-NEXT: ; implicit-def: $sgpr10
+; GFX13-NEXT: ; implicit-def: $sgpr9
+; GFX13-NEXT: ; implicit-def: $sgpr3
+; GFX13-NEXT: ; implicit-def: $sgpr6
+; GFX13-NEXT: .LBB47_3: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s5, s8, exec_lo
+; GFX13-NEXT: s_cselect_b32 s5, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s5, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB47_5
+; GFX13-NEXT: ; %bb.4: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v14, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v9, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v8, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v13, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
+; GFX13-NEXT: v_dual_lshrrev_b32 v7, 24, v14 :: v_dual_lshrrev_b32 v6, 16, v14
+; GFX13-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
+; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX13-NEXT: v_lshrrev_b64 v[3:4], 24, v[13:14]
+; GFX13-NEXT: v_dual_lshrrev_b32 v10, 16, v8 :: v_dual_lshrrev_b32 v9, 8, v8
+; GFX13-NEXT: v_dual_lshrrev_b32 v5, 8, v14 :: v_dual_lshrrev_b32 v2, 16, v13
+; GFX13-NEXT: v_lshrrev_b32_e32 v1, 8, v13
+; GFX13-NEXT: s_branch .LBB47_6
+; GFX13-NEXT: .LBB47_5:
+; GFX13-NEXT: v_dual_mov_b32 v13, s0 :: v_dual_mov_b32 v14, s1
+; GFX13-NEXT: v_dual_mov_b32 v8, s2 :: v_dual_mov_b32 v1, s14
+; GFX13-NEXT: v_dual_mov_b32 v2, s12 :: v_dual_mov_b32 v5, s13
+; GFX13-NEXT: v_dual_mov_b32 v6, s11 :: v_dual_mov_b32 v7, s10
+; GFX13-NEXT: v_dual_mov_b32 v9, s9 :: v_dual_mov_b32 v10, s3
+; GFX13-NEXT: v_dual_mov_b32 v11, s6 :: v_dual_mov_b32 v3, s4
+; GFX13-NEXT: .LBB47_6: ; %end
+; GFX13-NEXT: v_dual_mov_b32 v0, v13 :: v_dual_mov_b32 v4, v14
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12096,6 +14703,26 @@ define <6 x half> @bitcast_v6bf16_to_v6f16(<6 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB48_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v6f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12517,6 +15144,34 @@ define inreg <6 x half> @bitcast_v6bf16_to_v6f16_scalar(<6 x bfloat> inreg %a, i
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v6f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB49_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB49_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB49_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12661,6 +15316,26 @@ define <6 x bfloat> @bitcast_v6f16_to_v6bf16(<6 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v6bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -12848,6 +15523,34 @@ define inreg <6 x bfloat> @bitcast_v6f16_to_v6bf16_scalar(<6 x half> inreg %a, i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v6bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB51_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB51_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB51_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13212,6 +15915,26 @@ define <6 x i16> @bitcast_v6bf16_to_v6i16(<6 x bfloat> %a, i32 %b) #0 {
; GFX11-FAKE16-NEXT: .LBB52_2: ; %end
; GFX11-FAKE16-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v6i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13613,6 +16336,34 @@ define inreg <6 x i16> @bitcast_v6bf16_to_v6i16_scalar(<6 x bfloat> inreg %a, i3
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-FAKE16-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6bf16_to_v6i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB53_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB53_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_bf16 v2, 0x40c0, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v1, 0x40c0, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_bf16 v0, 0x40c0, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB53_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13744,6 +16495,26 @@ define <6 x bfloat> @bitcast_v6i16_to_v6bf16(<6 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v6bf16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -13916,6 +16687,34 @@ define inreg <6 x bfloat> @bitcast_v6i16_to_v6bf16_scalar(<6 x i16> inreg %a, i3
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v6bf16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB55_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB55_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB55_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14038,6 +16837,26 @@ define <6 x i16> @bitcast_v6f16_to_v6i16(<6 x half> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v6i16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, v2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, v1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, v0 op_sel_hi:[0,1]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14211,6 +17030,34 @@ define inreg <6 x i16> @bitcast_v6f16_to_v6i16_scalar(<6 x half> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6f16_to_v6i16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB57_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB57_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_f16 v2, 0x200, s2 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v1, 0x200, s1 op_sel_hi:[0,1]
+; GFX13-NEXT: v_pk_add_f16 v0, 0x200, s0 op_sel_hi:[0,1]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB57_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14344,6 +17191,26 @@ define <6 x half> @bitcast_v6i16_to_v6f16(<6 x i16> %a, i32 %b) #0 {
; GFX11-NEXT: ; %bb.2: ; %end
; GFX11-NEXT: s_or_b32 exec_lo, exec_lo, s0
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v6f16:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_mov_b32 s0, exec_lo
+; GFX13-NEXT: v_cmpx_ne_u32_e32 0, v3
+; GFX13-NEXT: s_xor_b32 s0, exec_lo, s0
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_not1_saveexec_b32 s0, s0
+; GFX13-NEXT: ; %bb.1: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, v2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, v1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, v0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: ; %bb.2: ; %end
+; GFX13-NEXT: s_or_b32 exec_lo, exec_lo, s0
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
@@ -14515,6 +17382,34 @@ define inreg <6 x half> @bitcast_v6i16_to_v6f16_scalar(<6 x i16> inreg %a, i32 i
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX11-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX13-LABEL: bitcast_v6i16_to_v6f16_scalar:
+; GFX13: ; %bb.0:
+; GFX13-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX13-NEXT: s_wait_expcnt 0x0
+; GFX13-NEXT: s_wait_samplecnt 0x0
+; GFX13-NEXT: s_wait_bvhcnt 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_cmp_lg_u32 s3, 0
+; GFX13-NEXT: s_mov_b32 s4, 0
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_2
+; GFX13-NEXT: ; %bb.1:
+; GFX13-NEXT: s_mov_b32 s4, -1
+; GFX13-NEXT: .LBB59_2: ; %Flow
+; GFX13-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX13-NEXT: s_and_b32 s4, s4, exec_lo
+; GFX13-NEXT: s_cselect_b32 s4, 1, 0
+; GFX13-NEXT: s_cmp_lg_u32 s4, 1
+; GFX13-NEXT: s_cbranch_scc1 .LBB59_4
+; GFX13-NEXT: ; %bb.3: ; %cmp.true
+; GFX13-NEXT: v_pk_add_u16 v2, s2, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v1, s1, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: v_pk_add_u16 v0, s0, 3 op_sel_hi:[1,0]
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
+; GFX13-NEXT: .LBB59_4:
+; GFX13-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
+; GFX13-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX13-NEXT: s_set_pc_i64 s[30:31]
%cmp = icmp eq i32 %b, 0
br i1 %cmp, label %cmp.true, label %cmp.false
diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.ptr.ll b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.ptr.ll
index 89ea3fdd9ee32..1fbf06a9f02e8 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.ptr.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.ptr.ll
@@ -4,6 +4,7 @@
; RUN: llc -mtriple=amdgpu8.02 < %s | FileCheck -check-prefix=VI %s
; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefix=GFX9 %s
; RUN: llc -mtriple=amdgpu11.00 < %s | FileCheck -check-prefix=GFX11 %s
+; RUN: llc -mtriple=amdgpu13.10 < %s | FileCheck -check-prefix=GFX13 %s
define amdgpu_kernel void @bitcast_i8ptr_v16i8ptr(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
; SI-LABEL: bitcast_i8ptr_v16i8ptr:
@@ -61,6 +62,18 @@ define amdgpu_kernel void @bitcast_i8ptr_v16i8ptr(ptr addrspace(1) %out, ptr add
; GFX11-NEXT: v_mov_b32_e32 v2, s6
; GFX11-NEXT: global_store_b128 v4, v[0:3], s[0:1]
; GFX11-NEXT: s_endpgm
+;
+; GFX13-LABEL: bitcast_i8ptr_v16i8ptr:
+; GFX13: ; %bb.0: ; %entry
+; GFX13-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: s_load_b128 s[4:7], s[2:3], 0x0
+; GFX13-NEXT: s_wait_kmcnt 0x0
+; GFX13-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v0, s4
+; GFX13-NEXT: v_dual_mov_b32 v1, s5 :: v_dual_mov_b32 v2, s6
+; GFX13-NEXT: v_mov_b32_e32 v3, s7
+; GFX13-NEXT: global_store_b128 v4, v[0:3], s[0:1]
+; GFX13-NEXT: s_endpgm
entry:
%0 = load <16 x i8>, ptr addrspace(1) %in
store <16 x i8> %0, ptr addrspace(1) %out
More information about the llvm-commits
mailing list